稍微修改 上一次的代码,手动输入指令 像服务器发送不同的指令,服务器回复不同的消息
server
#define WIN32_LEAN_AND_MEAN
#include <WinSock2.h>
#include <windows.h>
#include <WS2tcpip.h>
#include <stdio.h>
#pragma comment(lib,"ws2_32.lib")
int main()
{
WORD ver = MAKEWORD(2, 2);
WSADATA dat;
WSAStartup(ver, &dat);
SOCKET _sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (_sock == INVALID_SOCKET)
{
printf("socket create failed\n");
}
else
{
printf("socket create sucess\n");
sockaddr_in _sin = {};
_sin.sin_family = AF_INET;
_sin.sin_addr.S_un.S_addr = INADDR_ANY;//inet_addr("127.0.0.1")
_sin.sin_port = htons(4567);
int bindresult = bind(_sock, (sockaddr *)&_sin, sizeof(_sin));
if (bindresult == SOCKET_ERROR)
{
printf("socket bind Failed\n");
}
else
{
printf("socket bind sucess\n");
int listenresult = listen(_sock, 5);
if (listenresult == SOCKET_ERROR)
{
printf("socket listen failed\n");
}
else
{
printf("socket listen sucess\n");
sockaddr_in clientAddr = {};
int nAddrLen = sizeof(clientAddr);
SOCKET _csock = INVALID_SOCKET;
_csock = accept(_sock, (sockaddr *)&clientAddr, &nAddrLen);
if (_csock == INVALID_SOCKET)
{
printf("Error,接受到无效客户端socket....\n");
}
char str[INET_ADDRSTRLEN];
printf("new client:%s-%d-%d\n", inet_ntop(AF_INET, &clientAddr.sin_addr, str, sizeof(str)),
clientAddr.sin_port,
clientAddr.sin_family);
while (true)
{
char recvbuf[256] = {};
int nlen = recv(_csock, recvbuf, 256, 0);
if (nlen > 0)
{
printf("client say:%s\n", recvbuf);
if (strcmp(recvbuf, "exit") == 0)
{
printf("client exit\n");
char msgbuf[] = "exit";
send(_csock, msgbuf, (int)strlen(msgbuf) + 1, 0);
closesocket(_csock);
}
else if (strcmp(recvbuf, "name") == 0)
{
char msgbuf[] = "sandy";
send(_csock, msgbuf, (int)strlen(msgbuf) + 1, 0);
}
else if (strcmp(recvbuf, "age") == 0)
{
char msgbuf[] = "20";
send(_csock, msgbuf, (int)strlen(msgbuf) + 1, 0);
}
else
{
char msgbuf[] = "?????";
send(_csock, msgbuf, (int)strlen(msgbuf) + 1, 0);
}
}
else
{
closesocket(_csock);
break;
}
}
}
}
}
closesocket(_sock);
WSACleanup();
getchar();
return 0;
}
client
#define WIN32_LEAN_AND_MEAN
#define _WINSOCK_DEPRECATED_NO_WARNINGS
#include <WinSock2.h>
#include <windows.h>
#include <WS2tcpip.h>
#include <stdio.h>
#pragma comment(lib,"ws2_32.lib")
int main()
{
WORD ver = MAKEWORD(2, 2);
WSADATA dat;
WSAStartup(ver, &dat);
SOCKET _sock = socket(AF_INET, SOCK_STREAM, 0);
if (_sock == INVALID_SOCKET)
{
printf("socket create Failed");
}
else
{
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 conresult = connect(_sock, (sockaddr*)&_sin, sizeof(_sin));
if (conresult == SOCKET_ERROR)
{
printf("socket connect Failed");
}
else
{
while (true)
{
char cmdbuf[256] = {};
scanf_s("%s", cmdbuf, 128);
send(_sock, cmdbuf, (int)strlen(cmdbuf) + 1, 0);
char recvbuf[256] = {};
int nlen = recv(_sock, recvbuf, 256, 0);
if (nlen)
{
printf("recv:%s\n", recvbuf);
}
}
}
}
closesocket(_sock);
WSACleanup();
getchar();
return 0;
}
顺带打个广告,非常不错的教程 手把手教你写 socket代码