异步Socket通讯,报错误“由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败。”

dulkernetbug 2009-08-04 02:43:26
小弟刚接触socket,就遇到了难题,异步Socket通讯,报错误“由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败。”
代码是这么写的
服务器端
private void button1_Click(object sender, EventArgs e)
{
try
{
listener = new AsySocket("192.168.1.3", Int32.Parse("5555"));
listener.OnAccept += new AcceptEventHandler(listener_OnAccept);
listener.Listen(10);

this.button1.Enabled = false;
}
catch (Exception en)
{
MessageBox.Show(en.Message);
}
}
客户端
//客户端
private void button2_Click(object sender, EventArgs e)
{
try
{
socket = new AsySocket("localhost", 0);
socket.OnSended += new AsySocketEventHandler(socket_OnSended);
socket.OnSendTo += new AsySocketEventHandler(socket_OnSendTo);

socket.OnStreamDataAccept += new StreamDataAcceptHandler(socket_OnStreamDataAccept);
socket.OnStringDataAccept += new StringDataAcceptHandler(socket_OnStringDataAccept);

socket.OnClosed += new AsySocketClosedEventHandler(socket_OnClosed);

socket.LinkObject.Connect("192.168.1.3", 5555);
button1.Enabled = false;

socket.BeginAcceptData();


}
catch (Exception ee)
{
MessageBox.Show(ee.Message);
}
}

而AsySocket的关键代码,我也贴出
public class AsySocket
{
/// <summary>
///
/// </summary>
/// <param name="LocalIP"></param>
/// <param name="LocalPort"></param>
public AsySocket(string LocalIP, int LocalPort)
{
mSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

try
{
IPAddress ip = Dns.GetHostAddresses(LocalIP)[0];
IPEndPoint ipe = new IPEndPoint(ip, LocalPort);
mID = Guid.NewGuid().ToString();
mSocket.Bind(ipe);
}
catch (Exception e)
{
//ErrLog.RecordErr(e, ModuleName, "AsySocket", "");

}
}


以下是文字说明,
应该排除端口问题,测试机器上未开启windows防火墙,5555端口是可以telnet的,单机试验可以顺利通过(服务器端和客户端都是本机),而服务器端和客户端分别部署两个机器,客户端开始连接的时候就报错“由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败。”,百思不得其解,还请高人指点
...全文
1852 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
hecker728 2009-08-04
  • 打赏
  • 举报
回复
设置连接超时
walkghost 2009-08-04
  • 打赏
  • 举报
回复
AsySocket("localhost", 0);
风之影子 2009-08-04
  • 打赏
  • 举报
回复
http://topic.csdn.net/u/20080623/08/4bbd2475-45f1-42e3-a613-16b094759ade.html?62697
dulkernetbug 2009-08-04
  • 打赏
  • 举报
回复
#region 公共方法
/// <summary>
/// 监听
/// </summary>
public void Listen(int backlog)
{
if (mSocket == null)
throw new ArgumentNullException("连接不存在");
mSocket.Listen(backlog);
mSocket.BeginAccept(new AsyncCallback(AcceptCallBack), null);//异步
}
/// <summary>
/// 开始接受数据
/// </summary>
public void BeginAcceptData()
{

if (mSocket == null)
throw new ArgumentNullException("连接对象为空");
//开始接收数据
StateObject state = new StateObject();
state.workSocket = mSocket;
mSocket.BeginReceive(state.buffer, 0, StateObject.BufferSize, 0, new AsyncCallback(ReceiveCallback), state);
//receiveDone.WaitOne();
}
dulkernetbug 2009-08-04
  • 打赏
  • 举报
回复
用途主要是我想做一个CS程序,让一个服务器的数据,定时备份通过socket到多个服务器上

110,571

社区成员

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

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

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