.h Include的地方:
#include <Windows.h>
#include <WinSock2.h>
------------------------------------------>
#include <WinSock2.h>
#include <Windows.h>
#include <Windows.h>
#include <WinSock2.h>
------------------------------------------>
#include <WinSock2.h>
#include <Windows.h>
客户端:#include <stdio.h>
#include <Winsock2.h>
#pragma comment(lib, "ws2_32.lib")void main()
{
SOCKET uiFdClientsocket;
WSADATA wsaData;
struct sockaddr_in stServerAddr;
int iAddrlen = sizeof(sockaddr_in);
char szSendbuffer[1024];
char szRecvbuffer[1024];
if (0 != WSAStartup(MAKEWORD(2,1),&wsaData))
{
printf("Winsock init faied!\r\n");
WSACleanup();
return;
}
if (LOBYTE( wsaData.wVersion ) != 2 || HIBYTE( wsaData.wVersion ) != 1)
{
printf("the socket version is error!\r\n");
WSACleanup();
return;
}
/* 服务器监听的端口和地址 */
memset(&stServerAddr, 0, sizeof(stServerAddr));
stServerAddr.sin_family = AF_INET;
stServerAddr.sin_port = htons(6000);
stServerAddr.sin_addr.s_addr = inet_addr("127.0.0.1");
while(true)
{
szSendbuffer[0] = '\0';
szRecvbuffer[0] = '\0';
/* 创建SOCKET */
uiFdClientsocket = socket(AF_INET, SOCK_STREAM, 0);
/* 连接服务器 */
connect(uiFdClientsocket, (SOCKADDR*)&stServerAddr, sizeof(sockaddr_in));
printf("connect to server ok...\r\n");
/* 接收服务器端数据 */
recv(uiFdClientsocket, szRecvbuffer, sizeof(szRecvbuffer), 0);
printf("revive data from server->%s\r\nnow input msg here...`\r\n",szRecvbuffer);
scanf("%s", szSendbuffer);
if(strcmp(szSendbuffer, "bye") == 0)
{
printf("exit\r\n");
Sleep(100);
closesocket(uiFdClientsocket);
break;
}
/* 向服务器端发送数据 */
send(uiFdClientsocket, szSendbuffer, sizeof(szSendbuffer) + 1, 0);
closesocket(uiFdClientsocket);
}
closesocket(uiFdClientsocket);
return;
}
服务端:#include <stdio.h>
/* Windows socket头文件 */
#include <Winsock2.h>
/* 网络API的动态链接库 */
#pragma comment(lib, "ws2_32.lib")void main()
{
SOCKET uiFdSerSocket;
SOCKET uiFdConnectSocket;
WSADATA wsaData;
char szSendbuffer[1024] = "\0";
char szRecvbuffer[1024] = "\0";
struct sockaddr_in stServerAddr;
struct sockaddr_in stClientAddr;
int iAddrlen = sizeof(sockaddr_in);
/* 调用Windows Sockets DLL,成功后才能使用socket系列函数 */
if (0 != WSAStartup(MAKEWORD(2,1), &wsaData))
{
printf("Winsock init failed!\r\n");
WSACleanup();
return;
}
if (LOBYTE( wsaData.wVersion ) != 2 || HIBYTE( wsaData.wVersion ) != 1)
{
printf("the socket version is error!\r\n");
WSACleanup();
return;
}
memset(&stServerAddr, 0, sizeof(stServerAddr));
memset(&stClientAddr, 0, sizeof(stClientAddr));
/* 服务器地址 */
stServerAddr.sin_family = AF_INET;
/* 监听端口 */
stServerAddr.sin_port = htons(6000);
stServerAddr.sin_addr.s_addr = INADDR_ANY;
/* 服务器端创建socket, 流模式(TCP)*/
uiFdSerSocket = socket(AF_INET, SOCK_STREAM, 0);
/* 绑定端口号 */
bind(uiFdSerSocket, (struct sockaddr*)&stServerAddr, sizeof(sockaddr_in));
/* 服务器监听 */
listen(uiFdSerSocket, 5);
while(true)
{
printf("waiting client send msg now...\r\n");
/* 接受客户端连接,获取客户端的ip地址 */
uiFdConnectSocket = accept(uiFdSerSocket, (SOCKADDR*)&stClientAddr, &iAddrlen);
/* 组合发送消息,将IP地址整形转化为字符串 */
sprintf(szSendbuffer, "Welcome %s to here!", inet_ntoa(stClientAddr.sin_addr));
/* 发送消息到客户端 */
send(uiFdConnectSocket, szSendbuffer, strlen(szSendbuffer)+1, 0);
/* 接收客户端消息 */
recv(uiFdConnectSocket, szRecvbuffer, sizeof(szRecvbuffer), 0);
printf("Received datagram from client %s->%s\n", inet_ntoa(stClientAddr.sin_addr), szRecvbuffer);
closesocket(uiFdConnectSocket);
}
closesocket(uiFdSerSocket);
}
真坑人呀,WinSock2.h也不设点防重复包含的头文件!