各位大虾!!小弟是个新手,最近学习Socket编程,遇到了一个问题:
主要代码如下:
Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
IPHostEntry dns2 = Dns.GetHostEntry("hp-15ff12452e50");
Console.WriteLine("现在正在连接到" + dns2.AddressList[0] + "的" + "4444号端口......");
IPAddress add1 = IPAddress.Parse(args[0]);
TcpListener tl = new TcpListener(add1, 4444);
string send_data = "tarzan!";
byte[] rec_byte = new byte[100];
byte[] send_byte = Encoding.Default.GetBytes(send_data.ToCharArray());
tl.Start();
IPEndPoint host1 = new IPEndPoint(dns2.AddressList[0], 4444);
Console.WriteLine(s.Connected);
s.Connect(host1);
Console.WriteLine(s.Connected);
byte[] msg = Encoding.Default.GetBytes("This is a test");
byte[] bytes = new byte[256];
try
{
// Blocks until send returns.
Console.WriteLine(Encoding.Default.GetString(msg));
int i = s.Send(msg, msg.Length, SocketFlags.None);
Console.WriteLine("Sent {0} bytes.", i.ToString());
s.SendTimeout = 5000;
// Get reply from the server.
//if (s.Available != 0)
//{
s.ReceiveTimeout = 5000;
int byteCount = s.Receive(bytes, s.Available,
SocketFlags.None);
if (byteCount > 0)
{
Console.WriteLine(Encoding.Default.GetString(bytes));
}
s.Close();
//}
}
catch ( SocketException e )
{
Console.WriteLine( "{0} Error code: {1}.", e.Message, e.ErrorCode.ToString() );
}
执行后,在命令行中报错为:
现在正在连接到10.10.0.1的4444号端口......
False
True
This is a test
Sent 14 bytes.
A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond Error code: 10060.
为什么收不到数据,请指教,谢谢
我已经关了防火墙
主要代码如下:
Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
IPHostEntry dns2 = Dns.GetHostEntry("hp-15ff12452e50");
Console.WriteLine("现在正在连接到" + dns2.AddressList[0] + "的" + "4444号端口......");
IPAddress add1 = IPAddress.Parse(args[0]);
TcpListener tl = new TcpListener(add1, 4444);
string send_data = "tarzan!";
byte[] rec_byte = new byte[100];
byte[] send_byte = Encoding.Default.GetBytes(send_data.ToCharArray());
tl.Start();
IPEndPoint host1 = new IPEndPoint(dns2.AddressList[0], 4444);
Console.WriteLine(s.Connected);
s.Connect(host1);
Console.WriteLine(s.Connected);
byte[] msg = Encoding.Default.GetBytes("This is a test");
byte[] bytes = new byte[256];
try
{
// Blocks until send returns.
Console.WriteLine(Encoding.Default.GetString(msg));
int i = s.Send(msg, msg.Length, SocketFlags.None);
Console.WriteLine("Sent {0} bytes.", i.ToString());
s.SendTimeout = 5000;
// Get reply from the server.
//if (s.Available != 0)
//{
s.ReceiveTimeout = 5000;
int byteCount = s.Receive(bytes, s.Available,
SocketFlags.None);
if (byteCount > 0)
{
Console.WriteLine(Encoding.Default.GetString(bytes));
}
s.Close();
//}
}
catch ( SocketException e )
{
Console.WriteLine( "{0} Error code: {1}.", e.Message, e.ErrorCode.ToString() );
}
执行后,在命令行中报错为:
现在正在连接到10.10.0.1的4444号端口......
False
True
This is a test
Sent 14 bytes.
A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond Error code: 10060.
为什么收不到数据,请指教,谢谢
我已经关了防火墙
IPHostEntry dns2 = Dns.GetHostEntry("hp-15ff12452e50");
Console.WriteLine("现在正在连接到" + dns2.AddressList[0] + "的" + "4444号端口......");
IPAddress add1 = IPAddress.Parse(args[0]);
TcpListener tl = new TcpListener(add1, 4444);
string send_data = "tarzan!";
byte[] rec_byte = new byte[100];
byte[] send_byte = Encoding.Default.GetBytes(send_data.ToCharArray());
tl.Start();
IPEndPoint host1 = new IPEndPoint(dns2.AddressList[0], 4444);
Console.WriteLine(s.Connected);
s.Connect(host1);
Console.WriteLine(s.Connected); //
//这里, Send出去的东西要添加回车
//
byte[] msg = Encoding.Default.GetBytes("This is a test\r\n\r\n\r\n");
byte[] bytes = new byte[256];
try
{
// Blocks until send returns.
Console.WriteLine(Encoding.Default.GetString(msg));
int i = s.Send(msg, msg.Length, SocketFlags.None);
Console.WriteLine("Sent {0} bytes.", i.ToString());
s.SendTimeout = 5000;
// Get reply from the server.
//if (s.Available != 0)
//{
s.ReceiveTimeout = 5000;
int byteCount = s.Receive(bytes, s.Available,
SocketFlags.None);
if (byteCount > 0)
{
Console.WriteLine(Encoding.Default.GetString(bytes));
}
s.Close();
//}
}
catch ( SocketException e )
{
Console.WriteLine( "{0} Error code: {1}.", e.Message, e.ErrorCode.ToString() );
}
telnet可以
怎么办啊,郁闷啊
只修改("This is a test\r\n\r\n\r\n");\就可以吗?我试过了,没用啊,很长时间每有解决这个问题了,不爽!
我这里 如果没有TcpListener,就会报错"目标主机积极拒绝"所以加上了
{
richTextBox1.AppendText(msg + "\r\n");
} private void button2_Click(object sender, EventArgs e)
{
Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
IPHostEntry dns2 = Dns.GetHostEntry("192.168.xx.xxx");
AppendText("现在正在连接到" + dns2.AddressList[0] + "的" + "4444号端口......");
IPAddress add1 = IPAddress.Parse("192.168.xx.xxx");
//TcpListener tl = new TcpListener(add1, 4444);
string send_data = "tarzan!";
byte[] rec_byte = new byte[100];
byte[] send_byte = Encoding.Default.GetBytes(send_data.ToCharArray());
//tl.Start();
IPEndPoint host1 = new IPEndPoint(dns2.AddressList[0], 4444);
AppendText("Socket Status: " + s.Connected.ToString());
s.Connect(host1);
AppendText("Socket Status: " + s.Connected.ToString()); //
//这里, Send出去的东西要添加回车
//
byte[] msg = Encoding.Default.GetBytes("This is a test\r\n\r\n");
byte[] bytes = new byte[256];
try
{
// Blocks until send returns.
AppendText(Encoding.Default.GetString(msg));
int i = s.Send(msg, msg.Length, SocketFlags.None);
AppendText(string.Format("Sent {0} bytes.", i.ToString()));
s.SendTimeout = 5000;
// Get reply from the server.
//if (s.Available != 0)
//{
s.ReceiveTimeout = 5000;
int byteCount = s.Receive(bytes, s.Available,
SocketFlags.None);
if (byteCount > 0)
{
AppendText(Encoding.Default.GetString(bytes));
}
s.Close();
//}
}
catch (SocketException exx)
{
AppendText(string.Format("{0} Error code: {1}.", exx.Message, exx.ErrorCode.ToString()));
}
}
test result:
现在正在连接到192.168.xx.xxx的4444号端口......
Socket Status: False
Socket Status: True
This is a test
Sent 18 bytes.
HTTP/1.1 400 Bad Request
Server: Microsoft-IIS/5.1
Date: Fri, 10 Aug 2007 07:53:44 GMT
Content-Type: text/html
Content-Length: 87<html><head><title>Error</title></head><body>The parameter is incorrect. </body></html>
如:
现在正在连接到192.168.xx.xxx的4444号端口......
Socket Status: False
Socket Status: True
This is a test
Sent 18 bytes.
不按ctrl+c无法退出
现在正在连接到10.10.0.1的4444号端口......
True
This is a testSent 20 bytes.
HTTP/1.1 400 Bad Request
Server: Microsoft-IIS/5.1
Date: Sat, 11 Aug 2007 21:03:39 GMT
Content-Type: text/html
Content-Length: 87
并没有显示内容啊,而且是Bad Request
为什么啊?
Server: Microsoft-IIS/5.1
Date: Sat, 11 Aug 2007 21:03:39 GMT
Content-Type: text/html
Content-Length: 87这就是Socket回应的内容啊, 它不是什么Server, 当然不会按照什么格式给你回应信息了, 能收到就是连接成功