各位大虾!!小弟是个新手,最近学习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.
为什么收不到数据,请指教,谢谢
我的防火墙已经关了,还是这样
我的防火墙已经关了,包括Windows自带的防火墙,可还是这样
telnet 10.10.0.1(or 127.0.0.1) 4444
然后就黑屏了,我输入echo还是黑的
// 这里要设定一个全局的变量,来控制进程通讯
private static ManualResetEvent allDone = new ManualResetEvent(false);....
public void YourMethod()
{
// 前面的代码不改,这里省略
// 这里需要改
try
{
allDone.Reset();
// Blocks until send returns.
Console.WriteLine(Encoding.Default.GetString(msg));
s.BeginSend(msg,0, msg.Length, SocketFlags.None, new AsyncCallback(SendCallback), s);
s.BeginReceive(bytes, 0, bytes.Length, SocketFlags.None, new AsyncCallback(ReceiveCallback), s);
// 等待执行完毕
allDone.WaitOne();
// 输出结果
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() );
}
}// 另外写方法结束异步
private void SendCallback(IAsyncResult ar)
{
Socket s = (Socket)ar.AsyncState;
int length = s.EndSend();
Console.Write ("Sent {0} bytes.", length.ToString());
}private void ReceiveCallback(IAsyncResult ar)
{
Socket s = (Socket)ar.AsyncState;
int length = s.EndReceive();
Console.Write ("Receive {0} bytes.", length.ToString());
allDone.Set();
}
你的方法中new AsyncCallback(SendCallback)报错:要求对象引用.不好意思,没有分数了,不过还是希望你能帮我一下,谢谢
测试方法中调用
s.BeginSend(msg,0, msg.Length, SocketFlags.None, new AsyncCallback(SendCallback), s);SendCallback是自定义的一个方法,已经声明了
private void SendCallback(IAsyncResult ar)
那我为什么报错啊??别的地方都没错