socket服务端 异步通信
源代码如下:
客户端接入的时候,
单步调试能进入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)
{
//
}
}
}
}
客户端接入的时候,
单步调试能进入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异步通信,包括服务端和客户端的实现。
C# WinForm实现Socket服务端通信项目实战
在现代桌面应用程序开发中,WinForm凭借其快速开发能力和良好的界面交互体验,广泛应用于企业级项目。随着网络通信需求的增长,将WinForm与Socket服务端结合成为一种常见架构模式。Socket通信作为底层网络交互的核心机制,负责实现客户端与服务端之间的数据传输。在WinForm应用中,通常由界面层负责用户操作与状态反馈,而Socket模块则承担网络监听、连接管理与数据收发任务。
socket异步通信,客服端与服务端
异步通信,也称为非阻塞通信,意味着当一个操作开始后,调用者无需等待该操作完成即可继续执行其他任务。在Socket编程中,异步通信允许客户端和服务器同时处理多个请求,提高了系统的并发性和效率。
java服务端socket异步通信nio源码
eclipse工程 导入eclipse myeclipse就可以完美运行 有测试类 每一行都有注释 资源分定为5分,如果大家还觉得我积分定多了,那么大家可以去下载那些个单个类10积分的。 请大家也体谅
C# Socket通信(资料全面:包含服务端和客户端,异步通信,海量数据通信,WPF)
1、使用C#/WPF 编写的服务端和客户端Socket通信代码(Tcp)2、使用三种方式(Socket,TcpListener,SocketAsyncEventArgs)编写Socket通信代码,保护


