C#我写了一个服务器客户端通过socket通信的程序,在本机上调试,IP和Port同为58.195.50.219,但是总出错?

求高手帮助,需要奖励的话支付宝支付。
提示:由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败。 192.168.1.219:12312
客户端:
namespace Client
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)
{
//try
//{
int port = 12312;
string host = "192.168.1.219";
IPAddress ip = IPAddress.Parse(host);
IPEndPoint ipe = new IPEndPoint(ip, port);
Socket c = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
c.Connect(ipe);
string sendStr = "hello!This is a socket test";
textBox1.Text = "hello!This is a socket test";
byte[] bs = Encoding.ASCII.GetBytes(sendStr);
c.Send(bs, bs.Length, 0);
string recvStr = "";
byte[] recvBytes = new byte[1024];
int bytes;
bytes = c.Receive(recvBytes, recvBytes.Length, 0);
recvStr += Encoding.ASCII.GetString(recvBytes, 0, bytes);
Console.WriteLine(recvStr);
c.Close();
}
}
}
服务器: public void sever()
{
try
{
int port = 12312;
string host = "58.195.50.219";
IPAddress ip = IPAddress.Parse(host);
IPEndPoint ipe = new IPEndPoint(ip, port);
Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
s.Bind(ipe);
s.Listen(0);
Socket temp = s.Accept();
string recvStr = "";
byte[] recvBytes = new byte[1024];
int bytes;
bytes = temp.Receive(recvBytes, recvBytes.Length, 0);
recvStr += Encoding.ASCII.GetString(recvBytes, 0, bytes);
Console.WriteLine(recvStr);
this.textBox1.Text = recvStr;
string sendStr = "Ok!Sucess!";
byte[] bs = Encoding.ASCII.GetBytes(sendStr);
temp.Send(bs, bs.Length, 0);
temp.Shutdown(SocketShutdown.Both);
temp.Close();
s.Shutdown(SocketShutdown.Both);
s.Close();
}
catch (ArgumentNullException es)
{
Console.WriteLine("ArgumentNullException: {0}", es);
}
catch (SocketException es)
{
Console.WriteLine("SocketException: {0}", es);
}
Console.ReadLine();
}
Client的IP也为58.195.50.219,上面写错了。

第1个回答  2012-05-21
服务器侦听的IP最好由代码获取本机IP,别写字符串
IPAddress IP=System.Net.Dns.GetHostAddresses(System.Net.Dns.GetHostName())[0];
侦听最好使用回调方法,当客户端连接上来,调用回调函数,用TcpListener
第2个回答  2012-06-05
本机测试的时候 将服务器和客户端IP都改成127.0.0.1。另外端口可以随便填写,只要在0到65535之间,但要客户端和服务器端口相同。
第3个回答  2012-05-21
int port = 12312;
端口冲突了,本机测试要用不同的端口。追问

我已经将服务器端端口改为12313,两者IP一致,端口不一致了。但
c.Connect(ipe); 这一句总提示“由于目标计算机积极拒绝,无法连接。 58.195.50.219:12312”这是为何?

第4个回答  2012-05-21
客户端的host的IP似乎应该填写 服务器的IP喔追问

我已经将客户端IP修改为服务器IP了,两者一致。但
c.Connect(ipe); 这一句总提示“由于目标计算机积极拒绝,无法连接。 58.195.50.219:12312”这是为何?

追答

端口必须一致。因为对于TCP连接,客户端是自动创建临时端口的,不需要指定端口,只有服务器需要固定端口以接收客户端数据。所以创建的客户端连接的HOST和PORT应该指向的是服务器的IP和端口。另外,你的IP 58.195.50.219这个机器必须真实存在。

本回答被提问者采纳

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网