最近正在学习vc网络编程用socket编了一个udp网络聊天程序
可是发现它只能进行局域网通信 和外网就朋友聊天就不行了怎样实现不同局域网之间的通信???模型如下:
user1-----------------LAN1---------------------Internet----------------------------------LAN2----user2就是如何用socket实现user1和user2之间的通信???大侠们请指教,小弟感激不尽!!!
可是发现它只能进行局域网通信 和外网就朋友聊天就不行了怎样实现不同局域网之间的通信???模型如下:
user1-----------------LAN1---------------------Internet----------------------------------LAN2----user2就是如何用socket实现user1和user2之间的通信???大侠们请指教,小弟感激不尽!!!
//UDP服务器端:
#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)); SOCKADDR_IN addrClient;
int len=sizeof(SOCKADDR);
char recvBuf[100]; recvfrom(sockSrv,recvBuf,100,0,(SOCKADDR*)&addrClient,&len);
printf("%s/n",recvBuf);
closesocket(sockSrv);
WSACleanup();
}
//UDP客户端:
#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=(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); sendto(sockClient,"Hellow",strlen("Hellow")+1,0,
(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));
closesocket(sockClient);
WSACleanup();}
似乎是需要一台服务端在互联网上作为中介的呢所以至少需要三台电脑,在网络实验室做这个实验比较好,用一个交换机和一个路由器及三台电脑。
315539570.qzone.qq.com
我也正在学习穿透socket 编程。
欢迎一起讨论。
QQ不也是有服务器的么
也就是说你的服务器必须有公网IP
2.你本身不是处于lan中,而是直接具有一个公网IP地址,此时对端通过IP可连接你
3.一端通过路由器作DMZ映射到公网上,等于拥有了公网IP然后通信,此时对端通过公网IP能访问你
4.打洞,前提是你在公网有一个服务器
...
服务器的话 网上那些免费的ftp空间可以算是服务器吗?
UDP协议通信,服务器端不需要监听,客户端也不需要连接,可以直接接受和发送数据。