Chinaunix
标题:
Sock编程,请教!
[打印本页]
作者:
饭饭
时间:
2008-02-23 01:45
标题:
Sock编程,请教!
//Server:
serversocket=socket(AF_INET,SOCK_STREAM,0); //建立Socket链接
serveraddr.sin_family=AF_INET;
serveraddr.sin_port=htons(5555);
serveraddr.sin_addr.s_addr=htonl(INADDR_ANY);
//指定Socket的Local地址
bind(serversocket,(sockaddr *)&serveraddr,sizeof(struct sockaddr_in));
listen(serversocket,5); //设定监听状态,准备被连接
int size=sizeof(struct sockaddr_in);
//接受某一 Socket 的连接要求,以完成Socket 的连接
newsocket=accept(serversocket,(sockaddr *) &clientaddr,&size);
//Socket 接收
recv(newsocket,buffrecv,100,0);
printf( "receive:\n ");
printf( "%s ",buffrecv);
复制代码
//client:
char buffsend[100]= "测试测试测试!";
serveraddr.sin_family = AF_INET;
serveraddr.sin_port = htons(5555);
serveraddr.sin_addr.s_addr = inet_addr( "127.0.0.1 ");
//Connect:要求连接 TCP Socket 到指定的对方
int result=connect(clientsocket,(SOCKADDR *)&serveraddr,sizeof(serveraddr));
Sleep(2000);
if(result==-1)
{
printf( "connect server failed\n ");
exit(0);
}
// 使用连接式(connected)的 Socket 传送资料
result=send(clientsocket,buffsend,100,0);
复制代码
在局域网测试:目前Client 向 Server发送的测试信息能够接受到 ,
目前的问题是:
项目中服务器端在内网,需要通过internet ,
简单的网络拓补:
我在这里(61.*.*.*)[客户端]-------------- INTERNET ----------- 网关(219.*.*.*) ----->服务器端(192.168.*.*)
服务器端那边没权限在网关上做端口映射之类的设置,这样怎么和服务器端通信 ?
是不是可以通过反向连接来通讯 ,
我的思路(假设):
1: 61这台设置监听888端口;
2: 内网192那台连接61的888端口;
3: 61发送命令,比如"ls" ,192那台接收,并反馈结果到61的机器上 ;
好像这样经过好几次的握手通讯,这样的通讯连接数据能保持吗?
请指教!
作者:
cheney_lang
时间:
2008-02-23 10:20
有一个公网ip就可以。
作者:
cugb_cat
时间:
2008-02-23 11:54
如果两个都是私网,那只能找个公网服务器来进行p2p握手了。
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2