求能跨广域网通信的SOCKET源码

MoonlightDesigner 2013-06-24 11:33:41

最近学WINDOW下的SOCKET编程,但不知道如何跨广域网通信,希望那位高人可以给份服务端和客户端的源码,简单点。。。谢谢!!
...全文
256 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
有公网IP就行了,跟网络编程无关
www_adintr_com 2013-06-24
  • 打赏
  • 举报
回复
如果其中一个有公网的 IP 就好办了, 和你写的局域网通信程序一样的. 如果都是内网 IP, 那就要做 P2P 穿墙才行了.
MoonlightDesigner 2013-06-24
  • 打赏
  • 举报
回复
在下初学SOCKET编程,网络路由配置的不是很懂。。。我想要的是一份服务端以及客户端的代码,假设服务端与客户端使用不同的网络(铁通和电信),我开启报务端之后,然后我在另外一台使用与服务端不同网络的电脑执行客户端,客户端能发数据给服务端就可以了。。。。写了很多,希望帮帮忙。。。谢谢各位
飞天御剑流 2013-06-24
  • 打赏
  • 举报
回复
这个跟winsock无关,而是网络路由配置问题。
恨天低 2013-06-24
  • 打赏
  • 举报
回复
啥个意思?你需要两个IP,都能互相ping通即可。
Xiaona_Song 2013-06-24
  • 打赏
  • 举报
回复
看《WinSock网络编程经络》吧,这有socket例子: http://download.csdn.net/detail/geoff08zhang/4571358
一叶之舟 2013-06-24
  • 打赏
  • 举报
回复
用PTP打洞。
ztenv 版主 2013-06-24
  • 打赏
  • 举报
回复
引用 10 楼 ubuntu_ai 的回复:
[quote=引用 9 楼 lianshaohua 的回复:] UDP需要NAT的;192.168.xx.xx是一个非法的公网IP,当然不行了
那怎么设置啊?[/quote] 1、 NAT(但效果不太好) 2、在路由器上做端口映射 3、...
MoonlightDesigner 2013-06-24
  • 打赏
  • 举报
回复
我写的程序可以局域网通信,但无法进行广域网通信。。。
worldy 2013-06-24
  • 打赏
  • 举报
回复
引用 10 楼 ubuntu_ai 的回复:
[quote=引用 9 楼 lianshaohua 的回复:] UDP需要NAT的;192.168.xx.xx是一个非法的公网IP,当然不行了
那怎么设置啊?[/quote] 本质上讲,局域网能同,广域网也应该能通,但是现在通信的两台电脑一般都置于路由器之后,通信被路由器隔离开了,因此,通信的服务器端必须设置端口映射,将你使用的服务器端口映射到服务器端的一个ip地址上
MoonlightDesigner 2013-06-24
  • 打赏
  • 举报
回复
引用 9 楼 lianshaohua 的回复:
UDP需要NAT的;192.168.xx.xx是一个非法的公网IP,当然不行了
那怎么设置啊?
ztenv 版主 2013-06-24
  • 打赏
  • 举报
回复
UDP需要NAT的;192.168.xx.xx是一个非法的公网IP,当然不行了
MoonlightDesigner 2013-06-24
  • 打赏
  • 举报
回复
********************** client.cpp ***************************/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <winsock.h>
#pragma comment(lib,"ws2_32.lib")
 

int port = 6789;

int main()
{
	WSAData wsadata;
	if(WSAStartup(MAKEWORD(1,1), &wsadata))
		return 0;
		
    int socket_descrīptor;
    int iter = 0;
    char buf[80];
    struct sockaddr_in address;

    /* Initialize socket address structure for Interner Protocols */
    ZeroMemory(&address, sizeof(address)); // empty data structure
    address.sin_family = AF_INET;
    address.sin_addr.s_addr = inet_addr("192.168.xx.xx");
    address.sin_port = htons(port);

    /* Create a UDP socket */
    socket_descrīptor = socket(AF_INET, SOCK_DGRAM, 0);

    //Loop 20 times (a nice round number ) sending data
    for(iter = 0; iter <= 20; iter++)
    {
        sprintf(buf, "data packet with ID %d\n", iter);
        sendto(socket_descrīptor, buf, sizeof(buf), 0, (struct sockaddr *)&address, sizeof(address));
    }    

    /* send a termination message */
    sprintf(buf, "stop\n");
    sendto(socket_descrīptor, buf, sizeof(buf), 0, (struct sockaddr *)&address, sizeof(address)); //address is the target of the message send
     
    printf("Message Sent, Terminating\n");
    
    WSACleanup();
    return 0;
}
**************************** server.cpp ***********************************
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <winsock.h>
#pragma comment(lib,"ws2_32.lib")
 

int port = 6789;

int main()
{WSAData wsadata;
	if(WSAStartup(MAKEWORD(1,1), &wsadata))
		return 0;
    int sin_len;
    char message[256];
    int socket_descrīptor;
    struct sockaddr_in sin;
    printf("Waiting for data from sender\n");

    // Initialize socket address structure for Internet Protocols
    ZeroMemory(&sin, sizeof(sin));
    sin.sin_family = AF_INET;
    sin.sin_addr.s_addr = htonl(INADDR_ANY);
    sin.sin_port = htons(port);
    sin_len = sizeof(sin);

    //Create a UDP socket and bind it to the port
    socket_descrīptor = socket(AF_INET, SOCK_DGRAM, 0);
    bind(socket_descrīptor, (struct sockaddr *)&sin, sizeof(sin));
    
    //Loop forever (or until a termination message is received)
    // Received data through the socket and process it.The processing in this program is really simple --printing
    while(1)
    {
        recvfrom(socket_descrīptor, message, sizeof(message), 0, (struct sockaddr *)&sin, &sin_len);
        printf("Response from server : %s\n", message);
        if(strncmp(message, "stop", 4) == 0)
        {
            printf("sender has told me to end the connection\n");
            
        }
    } 
    WSACleanup();
    return 0;
}
可以局域网通信,但转到广域网之后就不行了,麻烦那位高人帮我改改可以吗
starytx 2013-06-24
  • 打赏
  • 举报
回复
这个就跟你收发快递类似,你只需关心附近的收发点写清楚你的目的地就可以了,具体怎么走就是快递公司的事了。
有新工作否 2013-06-24
  • 打赏
  • 举报
回复
这个是网络工程师干的事,跟你没有关系,对你来说,能ping通对方ip地址就可以了,其他的跟局域网一回事。
内容概要:本文档聚焦于通信系统中的调制解调技术与Turbo码的结合应用,系统研究了GMSK调制的二比特差分解调方法,以及Turbo码分别与BPSK、GMSK调制方式联合使用的系统性能。通过Matlab平台实现了完整的通信链路仿真,涵盖信号调制、信道编码、解调解码及误码率分析等关键环节,深入探讨了不同调制体制下Turbo编码系统的抗干扰能力与频谱效率表现。研究不仅提供了算法实现代码,还包含了详细的性能对比分析,有助于理解现代数字通信中高效编码调制技术的设计原理与工程实现。此外,文档附带多个相关科研方向的仿真案例,展现出广泛的技术延展性与实际应用价值。; 适合人群:具备通信原理、数字信号处理等相关基础知识,熟悉Matlab编程环境,正在从事无线通信系统仿真、信道编码理论研究或相关领域科研工作的研究生、高校教师及工程技术研究人员。; 使用场景及目标:①深入掌握GMSK调制与Turbo码相结合的技术机制,理解其在提高通信可靠性与频谱利用率方面的优势;②熟练运用Matlab构建完整的数字通信仿真系统,完成从调制编码到解调译码的全流程建模与性能评估;③为无人机通信、卫星通信、移动通信等实际应用场景下的高可靠传输系统设计提供理论支持与算法参考。; 阅读建议:建议结合所提供的Matlab代码逐模块运行与调试,重点关注GMSK差分解调过程与Turbo译码的迭代收敛特性,同时可参考文档中列出的其他研究课题拓展仿真范围,提升综合科研与工程实践能力。

65,211

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧