在同一台机子上运行测试客户端和服务器端可以通信成功,但两台机器上就不行了...
弄不明白是怎么回事,求教!服务器端:#include <Winsock2.h>
#include <stdio.h>
int main()
{
WORD wVersionRequested;
WSADATA wsaData;
int err; wVersionRequested = MAKEWORD(1, 1); err = WSAStartup(wVersionRequested, &wsaData);
if(err != 0)
{
WSACleanup();
return FALSE;
} if(LOBYTE(wsaData.wVersion) != 1 || HIBYTE(wsaData.wVersion) != 1)
{
WSACleanup();
return FALSE;
} SOCKET sockSrv = socket(AF_INET, SOCK_DGRAM, 0); SOCKADDR_IN addSrv;
addSrv.sin_addr.S_un.S_addr = htonl(INADDR_ANY);
addSrv.sin_family = AF_INET;
addSrv.sin_port = htons(6000); bind(sockSrv, (SOCKADDR*)&addSrv, sizeof(SOCKADDR)); char speech[100]; SOCKADDR_IN addrClient;
int len = sizeof(SOCKADDR); while(1)
{
recvfrom(sockSrv, speech, 100, 0, (SOCKADDR*)&addrClient, &len);
if(!strcmp(speech ,"Exit"))
{
sendto(sockSrv, "Exit", strlen("Exit")+1, 0, (SOCKADDR*)&addrClient, len);
printf("Chat end!\n");
break;
}
char s[100];
sprintf(s, "%s: %s", inet_ntoa(addrClient.sin_addr),  speech); printf("%s\n", s);
strcpy(speech, "\0"); printf("Please input data: ");
gets(speech);
sendto(sockSrv, speech, strlen(speech)+1, 0, (SOCKADDR*)&addrClient, len);
strcpy(speech, "\0");
}
closesocket(sockSrv);
WSACleanup(); return 0;
}客户端:
#include <Winsock2.h>
#include <stdio.h>
int main()
{
WORD wVersionRequested;
WSADATA wsaData;
int err; wVersionRequested = MAKEWORD(1, 1); err = WSAStartup(wVersionRequested, &wsaData);
if(err != 0)
{
WSACleanup();
return FALSE;
} if(LOBYTE(wsaData.wVersion) != 1 || HIBYTE(wsaData.wVersion) != 1)
{
WSACleanup();
return FALSE;
}
SOCKET sockClient = socket(AF_INET, SOCK_DGRAM, 0); SOCKADDR_IN addSrv;
addSrv.sin_addr.S_un.S_addr = inet_addr("192.168.1.122");//更改IP
addSrv.sin_family = AF_INET;
addSrv.sin_port = htons(6000); char speech[100];
int len = sizeof(SOCKADDR_IN); while(1)
{
printf("Please input data: ");
gets(speech);
sendto(sockClient, speech, strlen(speech) + 1, 0, (SOCKADDR*)&addSrv, len); strcpy(speech, "\0");
recvfrom(sockClient, speech, 100, 0, (SOCKADDR*)&addSrv, &len);
if(!strcmp(speech, "Exit"))
{
sendto(sockClient, "Exit", strlen("Exit")+1, 0, (SOCKADDR*)&addSrv, len);
printf("Chat end!\n");
break;
}
char s[100];
sprintf(s, "%s: %s", inet_ntoa(addSrv.sin_addr), speech);
printf("%s\n", s);
strcpy(speech, "\0");
}
closesocket(sockClient);
WSACleanup(); return 0;
}