- 论坛徽章:
- 0
|
- //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的机器上 ;
好像这样经过好几次的握手通讯,这样的通讯连接数据能保持吗?
请指教! |
|