首页 / C# / C# socket 请求转发
C# socket 请求转发
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了C# socket 请求转发,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2120字,纯文字阅读大概需要4分钟。
内容图文
服务端:
void Main() { Socket socketA = null; Socket socketB = null; var maxWaitingRequest = 10; var localSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); localSocket.SetSocketOption(SocketOptionLevel.Socket,SocketOptionName.ReuseAddress,true); localSocket.Bind(new IPEndPoint(IPAddress.Any, 81)); localSocket.Listen(maxWaitingRequest); while (true) { var remoteSocket = localSocket.Accept(); if (socketA == null) //client socketA = remoteSocket; else if (socketB == null) //server { socketB = remoteSocket; ThreadPool.QueueUserWorkItem(new WaitCallback(transfer), new Socket[] { socketA, socketB }); ThreadPool.QueueUserWorkItem(new WaitCallback(transfer), new Socket[] { socketB, socketA }); } } } public static void transfer(object obj) { var socketA = ((Socket[])obj)[0]; var socketB = ((Socket[])obj)[1]; while (true) { try { var data = new byte[10240]; int read = socketA.Receive(data); if(read > 0) socketB.Send(data.Take(read).ToArray()); } catch { socketA.Close(); socketA.Close(); break; } } }
客户端:
static Queue<string> msgList = new Queue<string>(); static readonly object msgLocker = new Object(); static int localPort = 20000; static string msg = "I am A"; void Main() { var localSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); var localEP = new IPEndPoint(IPAddress.Any, localPort); localSocket.Bind(localEP); localSocket.Connect(new IPEndPoint(IPAddress.Parse("127.0.0.1"), 81)); ThreadPool.QueueUserWorkItem(recieveHandler, localSocket); Thread.Sleep(10000); localSocket.Send(System.Text.Encoding.Default.GetBytes(msg)); while (true) { lock (msgLocker) { if(msgList.Count >0) Console.WriteLine(msgList.Dequeue()); } Thread.Sleep(1000); } } public static void recieveHandler(object p) { var localSocket = (Socket)p; while (true) { var data = new byte[1024]; var read = localSocket.Receive(data); if (read > 0) { Console.WriteLine("recieved " + read.ToString() + " bytes"); lock (msgLocker) msgList.Enqueue(System.Text.Encoding.Default.GetString(data.Take(read).ToArray())); } } } // Define other methods and classes here
先启动服务端,在10秒内,启动两个客启端,两个客户端就能收到来自对方的 msg
内容总结
以上是互联网集市为您收集整理的C# socket 请求转发全部内容,希望文章能够帮你解决C# socket 请求转发所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。