socket服务端 异步通信

willyouasd willyouasd 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
源代码如下:
客户端接入的时候,
单步调试能进入while(true),步进到reset,但是却不调用listenOK那个回调方法
求助

namespace d_webListener
{
public class d_webListener
{
private Thread serverRun;
private String ip = "";
private System.Windows.Forms.Label l1;
private int port = 0;
private Socket server;
private Socket client;

private byte[] bytes = new byte[1024]; //接收包头专用
//private byte[] scToByte; //将结构转化为byte

private conCom.conCom cc1;
private d_windows.d_windows dWindows;

private xmlMem.xmlMem xm = new xmlMem.xmlMem();

public static ManualResetEvent allDone = new ManualResetEvent(false);

delegate void sendToUp(string s);
sendToUp stu;

private void sendToAgent(string s)
{
StreamWriter sw = new StreamWriter(".\\out.txt",true);

sw.Write(s);
sw.Flush();
sw.Close();

s = s.Insert(s.IndexOf("HTTP/1.1") - 1, "\r\n");
xm.createFileInMem();
xm.addNodeInMem("FUND_ACCOUNT", "102045459");
xm.addNodeInMem("HTTP_REQ", s);
cc1.creatStruct(xm.doc().Length, xm.doc().Length, 400, 'M', 0);
cc1.SendData();
cc1.SendBody(xm.doc());
}

public d_webListener(System.Windows.Forms.Label l1,conCom.conCom cc1)
{
serverRun = new Thread(threadRun);
this.l1 = l1;
this.cc1 = cc1;
}

public String IP
{
set { ip = value; }
get { return ip; }
}

public int PORT
{
set { port = value; }
get { return port; }
}

public void connect()
{
try
{
IPAddress ipAddress = IPAddress.Parse(ip);
IPEndPoint localEndPoint = new IPEndPoint(ipAddress, this.port);
this.server = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
server.Bind(localEndPoint);
server.Listen(10);
serverRun.Start();

}
catch (Exception ee)
{
}
}

private void ListenOK(IAsyncResult ar)
{
try
{
// Signal the main thread to continue.接受回调方法 该方法的此节向主应用程序线程发出信号,
//让它继续处理并建立与客户端的连接
allDone.Set();
// Get the socket that handles the client request.获取客户端请求句柄
Socket listener = (Socket)ar.AsyncState;
Socket handler = listener.EndAccept(ar);

handler.BeginReceive(bytes, 0, 1024, SocketFlags.None, new AsyncCallback(RecData), client);
}
catch (Exception e)
{
//
}
}

private void RecData(IAsyncResult ar)
{
try
{
stu = new sendToUp(sendToAgent);
xm.xmlInit();
Socket handle = (Socket)ar.AsyncState;
int length = handle.EndReceive(ar);

l1.Invoke(stu, Encoding.Default.GetString(bytes, 0, length));
handle.BeginReceive(bytes, 0, 1024, SocketFlags.None, new AsyncCallback(RecData), handle);
}
catch (Exception ee)
{

}
}

private void threadRun()
{
try
{
while (true)
{
//Set the event to nonsignaled state.设置无信号状态的事件
allDone.Reset();
//Start an asynchronous socket to listen for connections.重新 启动异步连接
server.BeginAccept(new AsyncCallback(ListenOK), server);
//Wait until a connection is made before continuing.等待连接创建后继续
allDone.WaitOne();
}
}
catch (Exception e)
{
//
}
}
}
}
...全文

相关推荐

C# Socket异步通信,服务端,客户端通信

C#作为.NET框架的主要编程语言,提供了强大的Socket类库来实现网络通信。本篇将深入探讨C#中的Socket异步通信,包括服务端和客户端的实现。

qq_42704950

C# WinForm实现Socket服务端通信项目实战

在现代桌面应用程序开发中,WinForm凭借其快速开发能力和良好的界面交互体验,广泛应用于企业级项目。随着网络通信需求的增长,将WinForm与Socket服务端结合成为一种常见架构模式。Socket通信作为底层网络交互的核心机制,负责实现客户端与服务端之间的数据传输。在WinForm应用中,通常由界面层负责用户操作与状态反馈,而Socket模块则承担网络监听、连接管理与数据收发任务。

京脉圈

socket异步通信,客服端与服务端

异步通信,也称为非阻塞通信,意味着当一个操作开始后,调用者无需等待该操作完成即可继续执行其他任务。在Socket编程中,异步通信允许客户端和服务器同时处理多个请求,提高了系统的并发性和效率。

11小猪会飞11

java服务端socket异步通信nio源码

eclipse工程 导入eclipse myeclipse就可以完美运行 有测试类 每一行都有注释 资源分定为5分,如果大家还觉得我积分定多了,那么大家可以去下载那些个单个类10积分的。 请大家也体谅

YuLiLoo

C# Socket通信(资料全面:包含服务端和客户端,异步通信,海量数据通信,WPF)

1、使用C#/WPF 编写的服务端和客户端Socket通信代码(Tcp)2、使用三种方式(Socket,TcpListener,SocketAsyncEventArgs)编写Socket通信代码,保护

无熵~
评论 4
收藏 已收藏
分享
返回顶部
willyouasd
C# 111,128 成员 642,536 内容