本代码为tcp客户端C++代码,代码功能是向服务器端发送"help me"字符串,如果服务器端有相应,就会向客户端回复一段字符串。因为客户端和服务器的程序都运行在本机上,因此,服务器的IP设置为本机IP即127.0.0.1,服务器的端口为9555。下面是客户端程序的代码。
/*client*/
#include <stdio.h>
#include <WinSock2.h>
#include <WS2tcpip.h>
#pragma comment(lib, "ws2_32.lib")
int InitWinSocket()
{
WORD wVersionRequested;
WSADATA wsaData;
int err;
wVersionRequested = MAKEWORD(1, 1);//第一个参数为低位字节;第二个参数为高位字节
err = WSAStartup(wVersionRequested, &wsaData);//对winsock DLL(动态链接库文件)进行初始化,协商Winsock的版本支持,并分配必要的资源
if (err != 0)
{
return -1;
}
if (LOBYTE(wsaData.wVersion) != 1 || HIBYTE(wsaData.wVersion) != 1)//LOBYTE()取得16进制数最低位;HIBYTE()取得16进制数最高(最左边)那个字节的内容
{
WSACleanup();
return -1;
}
return 0;
}
int main()
{
/*初始化 Windows Socket*/
/*这部分不知道要不要加,不加也能运行,估计是我的电脑开机时已经对其进行了初始化*/
if (InitWinSocket() != 0)
{
printf("Init Windows Sock Failed!\n");
return -1;
}
printf("Client:\n");
SOCKET sock;
sockaddr_in server;
/*创建socket*/
sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (sock < 0)
{
printf("create socket failed!\n");
return -1;
}
/*对socket进行一些设置,这里是端口复用设置*/
int opt = 1;
socklen_t optlen = sizeof(opt);
if (setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, (char*)&opt, optlen) < 0)
{
printf("set sock opt failed!\n");
return -1;
}
/*设置服务器ip和端口*/
server.sin_family = AF_INET;
server.sin_port = htons(9555);
server.sin_addr.s_addr = inet_addr("127.0.0.1");
/*连接到服务器*/
if (connect(sock, (sockaddr*)&server, sizeof(sockaddr)) < 0)
{
printf("connect to server failed!\n");
return -1;
}
/*发送请求*/
char buf[1024];
strcpy_s(buf, "help me");
int len = strlen(buf);
send(sock, buf, len, 0);
/*收到回复*/
memset(buf, 0, sizeof(buf));
len = recv(sock, buf, sizeof(buf), 0);
if (len > 0)
{
printf("recv = %s\n", buf);
}
closesocket(sock);
WSACleanup();
return 0;
}