user-0 提问: 怎么实现在局域网内两台电脑的聊天

回复:
user: user-1
content: 局域网的话可以使用UDP组播，无需连接就可以进行通信

user: user-2
content: 还是知道代码意思再说吧

user: user-3
content: 改下ip吧，哈哈哈

user: user-4
content: 注意IP，另外就算IP改好了注意防火墙。

user: user-5
content: 这要看你自己局域网机器的IP啊  引用 3 楼 yuzengyuan 的回复:[quote=引用 2 楼 turingo 的回复:] 以下的IP地址要改： addrSrv.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");  [quote=引用 楼主 yuzengyuan 的回复:] 我是看孙鑫的VC++书的，里面有这样的聊天程序，在本地机子上开两个窗口是可以聊天的，但是局域网内一台机子开一个就不行。 这是服务器端的代码:  #include <Winsock2.h> #include <stdio.h>  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 sockSrv=socket(AF_INET,SOCK_DGRAM,0);  	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];  	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(sendBuf); 		sendto(sockSrv,sendBuf,strlen(sendBuf)+1,0,(SOCKADDR*)&addrClient,len); 	} 	closesocket(sockSrv); 	WSACleanup(); }  这是客户端的代码:  #include <Winsock2.h> #include <stdio.h>  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_DGRAM,0);         	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);  	char recvBuf[100]; 	char sendBuf[100]; 	char tempBuf[200];  	int len=sizeof(SOCKADDR);  	while(1) 	{ 		printf("Please input data:\n"); 		gets(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(); }  最好也帮我实现一下对内网和外网都可以聊天的[/quote] 怎么改[/quote]

user: user-0
content: 引用 2 楼 turingo 的回复:以下的IP地址要改： addrSrv.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");  [quote=引用 楼主 yuzengyuan 的回复:] 我是看孙鑫的VC++书的，里面有这样的聊天程序，在本地机子上开两个窗口是可以聊天的，但是局域网内一台机子开一个就不行。 这是服务器端的代码:  #include <Winsock2.h> #include <stdio.h>  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 sockSrv=socket(AF_INET,SOCK_DGRAM,0);  	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];  	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(sendBuf); 		sendto(sockSrv,sendBuf,strlen(sendBuf)+1,0,(SOCKADDR*)&addrClient,len); 	} 	closesocket(sockSrv); 	WSACleanup(); }  这是客户端的代码:  #include <Winsock2.h> #include <stdio.h>  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_DGRAM,0);         	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);  	char recvBuf[100]; 	char sendBuf[100]; 	char tempBuf[200];  	int len=sizeof(SOCKADDR);  	while(1) 	{ 		printf("Please input data:\n"); 		gets(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(); }  最好也帮我实现一下对内网和外网都可以聊天的[/quote] 怎么改

user: user-5
content: 以下的IP地址要改： addrSrv.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");  引用 楼主 yuzengyuan 的回复:我是看孙鑫的VC++书的，里面有这样的聊天程序，在本地机子上开两个窗口是可以聊天的，但是局域网内一台机子开一个就不行。 这是服务器端的代码:  #include <Winsock2.h> #include <stdio.h>  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 sockSrv=socket(AF_INET,SOCK_DGRAM,0);  	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];  	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(sendBuf); 		sendto(sockSrv,sendBuf,strlen(sendBuf)+1,0,(SOCKADDR*)&addrClient,len); 	} 	closesocket(sockSrv); 	WSACleanup(); }  这是客户端的代码:  #include <Winsock2.h> #include <stdio.h>  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_DGRAM,0);         	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);  	char recvBuf[100]; 	char sendBuf[100]; 	char tempBuf[200];  	int len=sizeof(SOCKADDR);  	while(1) 	{ 		printf("Please input data:\n"); 		gets(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(); }  最好也帮我实现一下对内网和外网都可以聊天的

user: user-6
content: 简单的socket基本c/s！