一下是服务器代码(只有服务器出错了)
#include
#include
#include
#pragma comment (lib,"WS2_32.lib")
SOCKADDR_IN cAddr = {0};
int len = sizeof(cAddr);
SOCKET clientSocket[1024];
int count = 0;
void tongxin(int idx) {
char buff[1024];
int r;
int i;
while(1) {
r = recv(clientSocket[idx],buff,1023,0);
if(r > 0)
{
buff[r] = 0;
printf("%d:%s\n",idx,buff);
for(i = 0; i < count; i++){
send(clientSocket[i],buff,strlen(buff),0);
}
}
}
}
int main(int argc, char *argv[]) {
WSADATA wsaData;
WSAStartup(MAKEWORD(2,2),&wsaData);
if(LOBYTE(wsaData.wVersion) != 2
|| HIBYTE(wsaData.wVersion) != 2)
{
printf("加载的套接字版本不一致!\n");
system("pause");
return 0;
}
//创建套接字
SOCKET serveSocket = socket(AF_INET,SOCK_STREAM,0);
if(serveSocket == SOCKET_ERROR)
{
printf("创建socket失败!\n");
WSACleanup();
system("pause");
return 0;
}
//创建服务器地址族
SOCKADDR_IN addr = {0};
addr.sin_family = AF_INET;
addr.sin_addr.S_un.S_addr = inet_addr("192.168.1.5");
addr.sin_port = htons(10086);
//绑定
int r = bind(serveSocket,(struct sockaddr*)&addr,sizeof(addr));
if(r == -1)
{
printf("bind失败!\n");
closesocket(serveSocket);
WSACleanup();
system("pause");
}
//监听
r = listen(serveSocket,10);
if(-1 == r)
{
printf("监听失败!\n");
closesocket(serveSocket);
WSACleanup();
system("pause");
return 0;
}
//等待客户端连接
while(1) {
clientSocket[count] = accept(serveSocket,(struct sockaddr*)&cAddr,&len);
if(clientSocket[count] == SOCKET_ERROR)
{
printf("服务器宕机了!\n");
closesocket(serveSocket);
WSACleanup();
system("pause");
return 0;
}
printf("有客户端连接到了服务器: %s\n",inet_ntoa(cAddr.sin_addr));
CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)tongxin,(char*)count,0,NULL);
count++;
}
return 0;
}
警告信息为:D:\dev-c++\dev-c++文档\网络聊天\服务器端\main.c In function 'main':
94 56 D:\dev-c++\dev-c++文档\网络聊天\服务器端\main.c [Warning] cast to pointer from integer of different size [-Wint-to-pointer-cast]
似乎是说CreateThread()第四个参数不对,而客户端由于我写的是NULL,所以没有警告。这个怎么解决?谢谢。
cast to pointer from integer of different size [-Wint-to-pointer-cast]
第四个参数你加上一个转换,这是说指针的大小不同。
第四个参数是传给线程的参数,你看看应该是什么类型,你为何要转为char*