客户端
(编译环境:VS 2012)
PS:注意,client客户端,连接IP记得要改成自己电脑的IP,不然会一直connect失败。
如何获取自己的IP
打开cmd ,进去之后在控制台输入 ipconfig/all 找到ipv4的地址,改了就行了,因为我这是连接的ipv4。
具体的函数参数不懂可以直接百度,我就不赘述了,希望能让各位学习到一二。
CLIENT客户端
#include "stdafx.h"
//网络通信WINDOWS下头文件
#include<winsock2.h>
//网络通信的windows下的库文件
#define PORT 5000
#pragma comment(lib,"ws2_32.lib")
int _tmain(int argc, _TCHAR* argv[])
{
//初始化WSA
WORD sockVersion = MAKEWORD(2, 2);
WSADATA wsaData;
if (WSAStartup(sockVersion, &wsaData) != 0)
{
return 0;
}
//打开lib 库.
int sockfd = socket(AF_INET,SOCK_STREAM,0);
if(sockfd < 0)
{
printf("socket err\n");
return -1;
} //检测是否报错
printf("create socket succes\n");
struct sockaddr_in serAddr;
memset(&serAddr,0,sizeof(serAddr));//清空结构体做初始化
//sin_family使用IPV4
serAddr.sin_family = AF_INET; // 使用IP地址家族 //IPV4
//sin_port端口号
serAddr.sin_port = htons(PORT); /* short, NBO*/
//sin_addr服务器的Ip地址
serAddr.sin_addr.S_un.S_addr= inet_addr("192.168.1.104");
// linux底下是这样[serAddr.sin_addr.s_addr = inet_addr("192.168.0.104");]
int res = connect(sockfd, (struct sockaddr*)&serAddr , sizeof(serAddr));
if(res < 0)
{
printf("connect err\n");
return -1;
} //检测是否报错
printf("connect server succes\n");
char sendBuf[100] = {0};
strcpy(sendBuf,"hello");
res = send(sockfd,sendBuf,strlen(sendBuf),0);
if(res < 0)
{
printf("send err\n");
return -1;
}
printf("send succes=[%s] \n",sendBuf);
closesocket(sockfd);
return 0;
}
服务器端
下面展示一些 内联代码片
。
#include "stdafx.h"
#include <WinSock2.h>
#pragma comment(lib,"ws2_32.lib")
#define PORT 5000
int _tmain(int argc, _TCHAR* argv[])
{
//初始化WSA
WORD sockVersion = MAKEWORD(2, 2);
WSADATA wsaData;
if (WSAStartup(sockVersion, &wsaData) != 0)
{
return 0;
}
//打开lib 库.
//1.创建socket.
int sockfd = socket(AF_INET,SOCK_STREAM,0);// 使用什么网络,使用什么协议
if(sockfd < 0)
{
printf(" create socket err \n");
return -1;
}
printf(" create socket succses \n");
//创建结构体,写入链接参数
struct sockaddr_in serAddr;
memset(&serAddr, 0, sizeof(serAddr));
serAddr.sin_family = AF_INET; // 使用IP地址家族
serAddr.sin_port = htons(PORT); /* short, NBO*/
serAddr.sin_addr.S_un.S_addr = INADDR_ANY;//微软提供的服务器端的自动获取本机ip的宏,客户端没用。
int res=bind(sockfd,(struct sockaddr*)&serAddr,sizeof(serAddr));
if(res < 0)
{
printf(" create bind err \n");
return -1;
}
printf(" create bind succses \n");
res = listen(sockfd,10);//监听用哪个sokect载体,最多监听几个?
if(res < 0)
{
printf(" create listen err \n");
return -1;
}
printf(" create listen succses \n");
//accept函数是一个阻塞函数
int newLink = accept(sockfd,NULL,NULL);
if(newLink < 0)
{
printf(" accept err \n");
return -1;
}
printf(" accept succses \n");
//在服务器端,用新的链路进行新的链接。
//为什么不用sockfd? 因为这个还要用来监听其他的客户端。
char recvBuf[100] = {0};
res = recv(newLink,recvBuf,5,0); //有坑。
if(res < 0)
{
printf("recv err \n");
return -1;
}
printf("recv data = [%s]\n", recvBuf);
closesocket(newLink);
closesocket(sockfd);
return 0;
}