【求助】关于两机TCP/IP通讯的问题,有一方ping不通

浅蓝Light_Blue 2014-01-03 09:51:17
如题,我做了一个客户端一个服务器程序,放在两台电脑上进行通讯

一台是台式机XP的系统,连接的是办公室的有线网

一台是笔记本的win7系统,连接的是办公室的无线网

我用笔记本可以ping通台式机,但是台式机不能ping通笔记本

两个计算机可能不在同一个局域网内,通过CMD的IPConfig命令查看到台式机IP为192.168.2.138,子网掩码255.255.255.0,默认网关192.168.2.6,笔记本的IP为192.168.10.111,子网掩码255.255.255.0,默认网关192.168.10.1

问题是我用笔记本做客户端给台式机的服务器发送消息可以正常接收

但是用笔记本做服务器接收台式机的消息就不行了,显示连接超时无响应,而且台式机获取到的IP是192.168.2.99,和我在笔记本查看到的IP不一样啊,这是为什么,感觉好像它把接收到的笔记本IP转换成自己局域网内的IP了

怎么样才能让两机互相通讯呢

以下是服务器代码

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Net;
using System.Net.Sockets;
using System.Threading;
using SmsSrv;
using System.IO;

namespace Server
{
public partial class Form1 : Form
{
String recivevalue = string.Empty;
IPEndPoint clientipe;
String telenum, mess;
Thread thread;
//SmsMgr sms;
public Form1()
{
InitializeComponent();
thread = new Thread(new ThreadStart(Listen));
thread.IsBackground = true;
thread.Start();
}

public void Listen()
{
Socket listen_pro = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
IPAddress localaddr = Dns.GetHostEntry(Dns.GetHostName()).AddressList[0];
IPEndPoint ipendpoint = new IPEndPoint(IPAddress.Parse("192.168.10.111"), 2012);
listen_pro.Bind(ipendpoint);
listen_pro.Listen(10);
Byte[] recived = new Byte[1024];
while (true)
{
while (true)
{
Socket socket = listen_pro.Accept();
int numbytes = socket.Receive(recived);
clientipe = (IPEndPoint)socket.RemoteEndPoint;
recivevalue += Encoding.UTF8.GetString(recived, 0, numbytes);
if (recivevalue.IndexOf("#") > -1)
{
break;
}
}
telenum = recivevalue.Substring(0, 11);
mess = recivevalue.Substring(recivevalue.IndexOf("*") + 1);
mess = mess.Substring(0, mess.Length - 1);
Client_IP.Text = clientipe.Address.ToString();
Phonenum.Text = telenum;
Message.Text = mess;
recivevalue = string.Empty;
Send_Stats.Text = ("发送中");
Send_Stats.Text = ("发送成功!");
}
}
private void Form1_Load(object sender, EventArgs e)
{
System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls = false;
}
}
}


客户端代码

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Net.Sockets;
using System.Net;
using System.Threading;

namespace Client
{
public partial class Form1 : Form
{
String Phone, Message_send;


String recivevalue = string.Empty;

public Form1()
{
InitializeComponent();
}

public void Send_Click(object sender, EventArgs e)
{
IPAddress ipadd = IPAddress.Parse(IP_add.Text.ToString());
IPEndPoint ipendpoint = new IPEndPoint(ipadd,2012);
Phone = PhoneNum.Text;
Message_send = Message.Text;
Byte[] recivemes=new Byte[1024];
Socket send_pro = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
send_pro.Connect(ipendpoint);
Byte[] forwordmessage = Encoding.UTF8.GetBytes(Phone + "*" + Message_send + "#");
send_pro.Send(forwordmessage);
Send_Message.Text = ("发送成功!");
}

private void Cancel_Click(object sender, EventArgs e)
{
PhoneNum.Clear();
Message.Clear();
}

private void Form1_Load(object sender, EventArgs e)
{
System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls = false;
}

private void Message_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{
Send_Click(sender,e);
}
}
}
}
...全文
376 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
浅蓝Light_Blue 2014-01-03
  • 打赏
  • 举报
回复
引用 8 楼 wind_cloud2011 的回复:
是的,如果在不同的网段,要在路由器上做路由,如果让无线路由器在无线后要在同一个网段,只需要把局域网的网线插在无线AP的LAN口,关闭无线AP的DHCP功能,这样无线AP就只是作为一个 HUB来使用了
好的,我知道了,谢谢您
wind_cloud2011 2014-01-03
  • 打赏
  • 举报
回复
你可以在ping对方的机子上加个静态路由试一下,在CMD里route add 192.168.10.0 mask 255.255.255.0 1192.168.1.1 类似这样的命令,
wind_cloud2011 2014-01-03
  • 打赏
  • 举报
回复
是的,如果在不同的网段,要在路由器上做路由,如果让无线路由器在无线后要在同一个网段,只需要把局域网的网线插在无线AP的LAN口,关闭无线AP的DHCP功能,这样无线AP就只是作为一个 HUB来使用了
浅蓝Light_Blue 2014-01-03
  • 打赏
  • 举报
回复
引用 6 楼 wind_cloud2011 的回复:
通的是一个网段吧,无线连接后,就不是一个网段了
是的,我觉得是这个问题,应该是不属于同一个局域网吧 如果是这样可以让两机通讯么?一定要在同一个局域网或者网关么?
wind_cloud2011 2014-01-03
  • 打赏
  • 举报
回复
通的是一个网段吧,无线连接后,就不是一个网段了
浅蓝Light_Blue 2014-01-03
  • 打赏
  • 举报
回复
引用 3 楼 wind_cloud2011 的回复:
台式机不能ping通笔记本,应该是路由的问题,你只是单向通了,反向不通,不要用无线连接,接上网线试一下,
两台同时绑定在固定宽带上的计算机是可以互相ping的
浅蓝Light_Blue 2014-01-03
  • 打赏
  • 举报
回复
引用 3 楼 wind_cloud2011 的回复:
台式机不能ping通笔记本,应该是路由的问题,你只是单向通了,反向不通,不要用无线连接,接上网线试一下,
因为只有一个网线,所以只能一台机器连有线,我也不知道是怎么回事,按理来说台式机获取的笔记本IP不应该和我在笔记本上查到的不同啊,我把笔记本的ipv6禁用了,只用ipv4,试了好多种方法都不行
wind_cloud2011 2014-01-03
  • 打赏
  • 举报
回复
台式机不能ping通笔记本,应该是路由的问题,你只是单向通了,反向不通,不要用无线连接,接上网线试一下,
浅蓝Light_Blue 2014-01-03
  • 打赏
  • 举报
回复
对了,防火墙也都是关闭的,不存在防火墙阻拦的问题
浅蓝Light_Blue 2014-01-03
  • 打赏
  • 举报
回复
用台式机做客户端的时候,如果发送的IP是192.168.10.111,会显示长时间连接目标机无反应,如果用IP是192.168.2.99会显示目标机积极拒绝,这是为什么啊,求大神

111,088

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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