user-0 提问: C写的基于TCP的聊天程序，输出总是204.204.204.204 烫烫烫烫...

回复:
user: user-1
content: 围观

user: user-2
content: 不知道有多少前人掉在TCP Socket send(人多)send(病少)send(财富) recv(人多病)recv(少财富) 陷阱里面啊！ http://bbs.csdn.net/topics/380167545

user: user-3
content: 引用 2 楼 canmang9702 的回复:能具体说一下在哪里加么，本人小白,谢谢 在接收之前加memset，初始化缓存

user: user-4
content: 引用 楼主 canmang9702 的回复:#define _CRT_SECURE_NO_DEPRECATE #define _WINSOCK_DEPRECATED_NO_WARNINGS #include<WinSock2.h>   #include<stdio.h> //加载静态lib文件或者加载动态dll文件   #pragma comment(lib, "ws2_32.lib") void main() { 	//加载套接字库   	WORD wVersionRequested; 	WSADATA wsaData; 	int err; 	wVersionRequested = MAKEWORD(1, 1); 	err = WSAStartup(wVersionRequested, &wsaData); 	if (err != 0) 	{ 		return; 	} 	if (LOBYTE(wsaData.wVersion) != 1 || HIBYTE(wsaData.wVersion) != 1) 		// 检查这个低字节是不是1，高字节是不是1以确定是否我们所请求的1.1版本    		// 否则的话，调用WSACleanup()清除信息，结束函数     	{ 		WSACleanup(); 		return; 	} 	//创建套接字   	SOCKET sockSrv = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);//AF_INET  ipv4协议  SOCK_DGRAM 使用不连续不可靠的数据包连接。SOCK_SEQPACKET可靠 	SOCKADDR_IN addrSrv; 	addrSrv.sin_addr.S_un.S_addr = htonl(INADDR_ANY); 	addrSrv.sin_family = AF_INET; 	addrSrv.sin_port = htons(6000); 	//绑定套接字   	bind(sockSrv, (SOCKADDR *)&addrSrv, sizeof(SOCKADDR)); 	char recvBuf[100]; 	char sendBuf[100]; 	char tempBuf[200]; 	listen(sockSrv, 5); 	SOCKADDR_IN addrClient; 	int len = sizeof(SOCKADDR); 	while (1) 	{ 		//等待并接收数据   		recvfrom(sockSrv, recvBuf, 100, 0, (SOCKADDR *)&addrClient, &len); 		if ('q' == recvBuf[0]) 		{ 			sendto(sockSrv, "q", strlen("q") + 1, 0, (SOCKADDR*)&addrClient, len); 			printf("Chat end!\n"); 			break; 		} 		sprintf(tempBuf, "%s say %s", inet_ntoa(addrClient.sin_addr), recvBuf); 		printf("%s\n", tempBuf); 		//发送数据   		printf("Please input data:\n"); 		gets_s(sendBuf); 		sendto(sockSrv, sendBuf, strlen(sendBuf) + 1, 0, (SOCKADDR*)&addrClient, len); 	} 	//关闭套接字   	closesocket(sockSrv); 	WSACleanup(); }//服务端    #define _CRT_SECURE_NO_DEPRECATE #define _WINSOCK_DEPRECATED_NO_WARNINGS #include<WinSock2.h>   #include<stdio.h> //加载静态lib文件或者加载动态dll文件   #pragma comment(lib, "ws2_32.lib") void main() { 	    //加载套接字库   		WORD wVersionRequested; 	    WSADATA wsaData; 	    int err; 	    wVersionRequested = MAKEWORD(1, 1); 	    err = WSAStartup(wVersionRequested, &wsaData); 	    if (err != 0) 		    { 		        return; 		    } 	    if (LOBYTE(wsaData.wVersion) != 1 || HIBYTE(wsaData.wVersion) != 1) 		    { 		        WSACleanup(); 		        return; 		    } 	   //创建套接字   	   SOCKET sockClient = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); 	 	   SOCKADDR_IN addrSrv; 	   addrSrv.sin_addr.S_un.S_addr = inet_addr("127.0.0.1"); 	   addrSrv.sin_family = AF_INET; 	   addrSrv.sin_port = htons(6000); 	   connect(sockClient, (SOCKADDR*)&addrSrv, sizeof(SOCKADDR)); 	   		   char recvBuf[100]; 	       char sendBuf[100]; 	       char tempBuf[200]; 	   recv(sockClient, recvBuf, 100, 0); 	 		   int len = sizeof(SOCKADDR); 	 		   while (1) 		   { 		       //发送数据   			   printf("Please input data:\n"); 		       gets_s(sendBuf); 		       sendto(sockClient, sendBuf, strlen(sendBuf) + 1, 0, (SOCKADDR*)&addrSrv, len); 		       //等待并接收数据   			       recvfrom(sockClient, recvBuf, 100, 0, (SOCKADDR *)&addrSrv, &len); 		       if ('q' == recvBuf[0]) 			       { 			           sendto(sockClient, "q", strlen("q") + 1, 0, (SOCKADDR*)&addrSrv, len); 			           printf("Chat end!\n"); 			           break; 			        } 		       sprintf(tempBuf, "%s say %s", inet_ntoa(addrSrv.sin_addr), recvBuf); 		       printf("%s\n", tempBuf); 		 			   }    //关闭套接字   	   closesocket(sockClient); 	   WSACleanup(); 	   }//客户端  想写一个基于TCP的聊天程序，运行总是烫烫烫  1、TCP和UDP套接字，接收和发送的函数都不同，你这个程序问题挺大的，出现204.204.204.204，是打印了inet_ntoa ()函数的返回值，该函数是将十进制网络字节序转换为点分十进制IP格式，即类似192.168.0.1这种。 2、推荐入门网站： http://c.biancheng.net/cpp/socket/ 3、推荐相关博客 http://blog.csdn.net/wxf2012301351/article/category/6932136 4、希望好好加油，不要太着急

user: user-0
content: aaaa，这是我用UDP改的，不知道哪里不对了，求大神指教

user: user-0
content: 烫烫烫是没有了，可是服务器端会显示204.204.204.204 ，这是为什么，求大神！

user: user-0
content: 能具体说一下在哪里加么，本人小白,谢谢

user: user-3
content: 出现乱码，这是因为字符串数组缺少字符串的结束标志'\0'，建议接收之前，先将缓存初始化一下，比如 memset(recvBuf, 0, 100);