socket编程 ping命令-socket编程——内网ping公网失败

问题描述

socket编程——内网ping公网失败

我电脑连的是铁通的公网,在做一个C/S socket编程。在我一台电脑上客户端和服务器之间可以正常发送数据,但是客户端放到别的可以上网的电脑上时就连不上了。我用ping命令检测过网络情况,基本上都ping不通。只有一次一个同学在公司用他的电脑ping通了,不过是单向的,我还是Ping不通他的,服务器和客户端之间还是发送不了数据。有哪位高手知道是什么原因?谢谢!
服务器端部分代码如下:
//设定地址
serv.sin_addr.s_addr=htonl(INADDR_ANY);
serv.sin_family=AF_INET;
serv.sin_port=5000;//htons(5000);
addlen=sizeof(serv);
m_button.EnableWindow(FALSE);//退出为假
//创建socket
sock=socket(AF_INET,SOCK_STREAM,0);
BOOL val=true;
if(setsockopt(sock,SOL_SOCKET,SO_REUSEADDR,(char )val,sizeof(val))!=0);
{
printf("error!setsocket failed!/n");
// return -1;
}
//将socket绑定到服务器上
if (bind(sock,(sockaddr
)&serv,addlen))
{
m_edit.SetWindowText("绑定错误");
}else
{
//m_list.InsertItem(count++,inet_ntoa(serv.sin_addr));
m_edit.SetWindowText("服务器创建成功");
//开始侦听

listen(sock,5);
客户端:
cli.sin_addr.s_addr=inet_addr(ipaddress);
cli.sin_family=AF_INET;
cli.sin_port=5000;//htons(5000);
//创建socket
clisock=socket(AF_INET,SOCK_STREAM,0);

val=true;
if(setsockopt(clisock,SOL_SOCKET,SO_REUSEADDR,(char *)val,sizeof(val))!=0);
{
printf("error!setsocket failed!/n");
// return -1;
}

  if(connect(dlg->clisock,(sockaddr*)&(dlg->cli),sizeof(dlg->cli))==INVALID_SOCKET)
{
    printf("connet()failed:%dn",WSAGetLastError());
    dlg->m_edit.SetWindowText("等待.....");
}
else
{
    dlg->m_list.InsertItem(dlg->count++,"连接成功");
    dlg->m_button1.EnableWindow(TRUE);
    dlg->SetForegroundWindow();
}
//接收数据
while(s!=SOCKET_ERROR && dlg->ee!=0)
{
    //调用recv函数接收数据
    s=recv(dlg->clisock,buff,100,0);
    dlg->SetForegroundWindow();//做什么?
    //如果没有接收错误,同时没有断开连接,则显示接收到的数据
    if (s!=SOCKET_ERROR && dlg->ee!=0)
    dlg->m_list.InsertItem(dlg->count++,buff);
    dlg->m_list.Scroll(size);
}

解决方案

ping不通说明网络不通,你的程序肯定发送不了数据的,先保证客户端所在的机器能ping通服务端所在的机器,然后再测试你的程序。

解决方案二:

内网ip ping 公网ip机器,可以。
反过来不行,因为内网地址没法直接访问

时间: 2024-11-02 10:41:36

socket编程 ping命令-socket编程——内网ping公网失败的相关文章

跳板-公司内网ping不同外网,但是浏览器验证后可以访问

问题描述 公司内网ping不同外网,但是浏览器验证后可以访问 目的:想在公司内网通过ssh软件连接到阿里云服务器 当前环境:在浏览器中可以通过ip访问到我的服务器,在命令行中ping不同 问题:如何通过java程序做个跳板,使之可以通过ssh连接到服务器 解决方案 是人家开启了防ping功能,所以你ping不通 windows的话使用远程桌面就可以连了,Linux的话使用ssh也可以连

详解Java设计模式编程中命令模式的项目结构实现_java

正论: 命令模式把一个请求或者操作封装到一个对象中.命令模式运行系统使用不同的请求把客户端参数化,对请求排队或者记录请求日志,可以提供命令的撤销和恢复功能. 通俗: 其实很好理解.命令模式,关心的就是命令(或者称为操作).打个比方.在一个公司里面,整个运作就像一个系统.某个boss发布了一个命令,中层领导接到这个命令,然后指派给具体负责这个员工.整个流程很清晰吧.有一个需求,如何将这个流程固定下来,形成一个系统.我们只要抓住了重点:命令.将它抽取出来,其他的都迎刃而解了.抽取出命令,封装成一个独

【解决】VPN连接后,不能ping通内网服务器

上个周把VPN服务器搭建完毕,打算本周连接进去开始部署相关的工作. 但是今天在成功连接进入VPN后,却发现客户端无法ping通VPN内部的其他服务器.从而导致,工作无法继续. 经过排查发现,客户端可以ping通VPN服务器内网网卡的IP地址.而内网的机器是可以ping通的,甚至VPN服务器本身内网网卡的IP地址也是和内网的其他机器正常通信的. VPN服务器内网的IP地址是10.10.1.20,客户端获取到的IP地址是10.10.1.8,如下图: 刚开始还以为是由于服务器上没有做静态路由导致,于是

linux下ping命令使用详解

  •ping命令一般用于检测网络通与不通,也叫时延,其值越大,速度越慢PING(PacketInternetGrope),因特网包探索器,用于测试网络连接量的程序. •ping发送一个ICMP回声请求消息给目的地并报告是否收到所希望的ICMP回声应答.它是用来检查网络是否通畅或者网络连接速度的命令. •原理:网络上的机器都有唯一确定的IP地址,我们给目标IP地址发送一个数据包,对方就要返回一个同样大小的数据包,根据返回的数据包我们可以确定目标主机的存在,可以初步判断目标主机的操作系统等. 二.

linux下ping命令使用介绍

  一.ping命令的原理和工作机制 •ping命令一般用于检测网络通与不通,也叫时延,其值越大,速度越慢PING(PacketInternetGrope),因特网包探索器,用于测试网络连接量的程序. •ping发送一个ICMP回声请求消息给目的地并报告是否收到所希望的ICMP回声应答.它是用来检查网络是否通畅或者网络连接速度的命令. •原理:网络上的机器都有唯一确定的IP地址,我们给目标IP地址发送一个数据包,对方就要返回一个同样大小的数据包,根据返回的数据包我们可以确定目标主机的存在,可以初

php模拟ping命令的方法

本篇文章主要说下如何使用php模拟我们常用的DOS命令ping命令的方法,这里主要用到的是php的内置函数exec来调用系统的ping命令,从而实现ping命令功能的. <?php $to_ping='www.Alixixi.com'; $count=2; $psize=66; echo "正在执行php ping命令,请等待...\n<br><br>"; flush(); while(1){ echo "<pre>"; e

用端口映射不通过网关开放内网的方法

今天给大家说说如何巧用端口映射,不通过网关开放内网的方法. 一.使用前提 需要有一台公网的IP.假如现在我们有一台公网的P .210.210.21.21 二.用到的工具 1.lcx.exe 2.vdic 三.方法讲解 方法一.用lcx.exe进行映射 (1)我们将lcx.exe传到公网IP上,在公网IP上DOS环境下执行 lcx –listen 端口1 端口2 如lcx –listen 3030 3166 此命令的意思是监听3030端口和3166端口,以便和外部进行连接. (2)将lcx.exe

C# 使用upnp访问内网服务器

问题描述 最近做了一个内网与外网通信的winform项目,使用upnp端口映射来访问内网服务器,在路由器上已经可以看到端口映射成功了,但是外网的客户端还是访问不了内网的服务器.我试过在此路由器下的客户端连接到同内网的服务器,能够成功的连接通信,使用的也是同一个端口映射,服务器端显示的客户端也是此路由器的公网IP地址.但是在外网就是死活也连不上内网的服务器,配置都是一样的!!求助各位大神啊.... 解决方案 解决方案二:你先ping一下,看外网连公网IP是通的不解决方案三:我在此路由器下的内网用户

巧用端口映射 不通过网关开放任意内网(LCX.exe)_安全教程

今天给大家说说如何巧用端口映射,不通过网关开放内网的方法. 一:使用前提 需要有一台公网的IP.假如现在我们有一台公网的IP :210.210.21.21 二:用到的工具 1.lcx.exe 2.vdic 三:方法讲解 方法一:用lcx.exe进行映射. (1)我们将lcx.exe传到公网IP上,在公网IP上DOS环境下执行 lcx –listen 端口1 端口2 如lcx –listen 3030 3166 见下图 此命令的意思是监听3030端口和3166端口,以便和外部进行连接. (2)将l