【求助】关于两机TCP/IP通讯的问题,有一方ping不通
如题,我做了一个客户端一个服务器程序,放在两台电脑上进行通讯
一台是台式机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);
}
}
}
}