服务器端
#include <WinSock2.h> // 由于版本问题WinSock2和windows的顺序不能颠倒
#include <windows.h>
#include <stdio.h>
#include <iostream>
#pragma comment(lib,"ws2_32.lib") //需要导入库
#define _CRT_SECURE_NO_WARNINGS
struct DataPackege
{
int age;
char name[32];
}; //生成包体传输
int main()
{
WORD ver = MAKEWORD(2,2); //windows 初始化必备
WSADATA dat;
WSAStartup(ver, &dat);
//
SOCKET _sock =socket(AF_INET,SOCK_STREAM,IPPROTO_TCP); //简历一个socket
sockaddr_in _sin = {};
_sin.sin_family = AF_INET; //配置各种参数
_sin.sin_port = htons(4567);
_sin.sin_addr.S_un.S_addr =inet_addr("127.0.0.1");
if (bind(_sock, (sockaddr*)&_sin, sizeof(_sin)) == SOCKET_ERROR)//绑定端口
{
printf("绑定失败");
}
else{
printf("绑定端口成功\n");
}
if (listen(_sock, 5) == SOCKET_ERROR){
printf("listen绑定失败");
}
else{
printf("listen绑定成功\n");
}
sockaddr_in clientAddr = {};
int nAddrLen = (int)sizeof(sockaddr_in);
SOCKET _cSock = accept(_sock, (sockaddr*)&clientAddr, &nAddrLen); //等待连接
if (_cSock == INVALID_SOCKET)
{
printf("错误,接受无效客户端SOCKET \n");
};
printf("新客户端加入:socket= %d", (int)_cSock); //打印输出连接的socket 信息
while (true) //接受信息输出信息
{
char _recvBuf[128] = {};
int nLen = recv(_cSock, _recvBuf,128, 0);
if (nLen <= 0)
{
printf("客户端退出,任务结束\n");
break;
}
else
{
printf("收到命令:%s \n",_recvBuf);
}
if (strcmp(_recvBuf, "getName")==0)
{
char msgBuf[] = "xiao qian";
send(_cSock,msgBuf,strlen(msgBuf)+1,0);
}
else if (strcmp(_recvBuf, "getAge")==0)
{
char msgBuf[] = "80";
send(_cSock, msgBuf, strlen(msgBuf) + 1, 0);
}
else if ( 0 == strcmp(_recvBuf,"GetInfo"))
{
DataPackege dp = { 80 ,"张国荣"};
send(_cSock, (const char *)&dp, sizeof(DataPackege),0);
}
else
{
char msgBuf[] = "无法识别";
send(_cSock, msgBuf, strlen(msgBuf) + 1, 0);
}
}
closesocket(_sock);
WSACleanup();
return 0;
}
客户端
#define _CRT_SECURE_NO_WARNINGS
#include <WinSock2.h>
#include <windows.h>
#include <stdio.h>
#pragma comment(lib,"ws2_32.lib")
struct DataPackege
{
int age;
char name[32];
};
int main()
{
WORD ver = MAKEWORD(2, 2);
WSADATA dat;
WSAStartup(ver, &dat);
//
SOCKET _sock = socket(AF_INET,SOCK_STREAM,0);
if (INVALID_SOCKET == _sock)
{
printf("错误,建立失败");
}
sockaddr_in _sin = {};
_sin.sin_family = AF_INET;
_sin.sin_port = htons(4567);
_sin.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
int ret = connect(_sock, (sockaddr*)&_sin, sizeof(sockaddr_in)); //连接socket
if (SOCKET_ERROR == ret){
printf("错误,建立socket失败");
}
else{
printf("建立成功\n");
}
while (true)
{
char cmdBuf[128] = {};
scanf("%s", cmdBuf);
if (0 == strcmp(cmdBuf, "exit"))
{
printf("收到exit,任务结束");
break;
}
else
{
send(_sock, cmdBuf, strlen(cmdBuf) + 1, 0);
}
char recvBuf[128] = {};
int nlen = recv(_sock, recvBuf, 128, 0);
if (nlen > 0)
{
DataPackege* dp = (DataPackege *)recvBuf;
if (strcmp(dp->name, "张国荣") == 0)
{
printf("接收到数据:年龄 = %d ,姓名 = %s \n", dp->age, dp->name);
}
else
{
printf("接收到数据: %s \n", recvBuf);
}
}
}
closesocket(_sock);
WSACleanup();
printf("退出程序");
getchar();
return 0;
}