C# socket多线程监听两个端口,分别处理数据

yc_learner 2018-11-15 10:03:41
socket连接俩个端口分别处理数据,运行之后总有一个线程接受不到客户端发过来的数据,也不返回数据。后面还要将两个线程的数据交互。代码如下,有没有大神教教我!!!

using System;
using System.ComponentModel;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading;
using System.Windows.Forms;

namespace SocketServer
{
public partial class Form1 : Form
{
static string data;
static string data1;
private static byte[] result = new byte[1024];
private static int myProt = 3000; //端口
private static int myProt1 = 4000; //端口
static Socket serverSocket;
public string message;
public static string receive;
object locker = new object();
object locker1 = new object();
public static int count = 1;
//static Form2 fr1 = new Form2();

public Form1()
{
InitializeComponent();
}

private void Form1_Load(object sender, EventArgs e)
{

BackgroundWorker worker1 = new BackgroundWorker();
worker1.DoWork += Worker1_DoWork;
worker1.RunWorkerAsync(locker1);
BackgroundWorker worker = new BackgroundWorker();
worker.DoWork += Worker_DoWork;
worker.RunWorkerAsync(locker);
}



private void Worker_DoWork(object sender, DoWorkEventArgs e)
{
try
{
//服务器IP地址
IPAddress ip = IPAddress.Any;
serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
serverSocket.Bind(new IPEndPoint(ip, myProt)); //绑定IP地址:端口
serverSocket.Listen(100); //设定最多100个排队连接请求

Console.WriteLine("启动监听{0}成功" + serverSocket.LocalEndPoint.ToString());//???
//while (true)
//{
Socket myclientSocket = serverSocket.Accept();
Thread thread = new Thread(ListenClientConnect);
thread.IsBackground = true;
thread.Start(myclientSocket);
}
catch { }
}

void ListenClientConnect(object i)
{
try
{
Socket myClientSocket = i as Socket;

while (true)
{

Thread thread = new Thread(Receive);
thread.IsBackground = true;
thread.Start(myClientSocket);
data = "111";
if (data != null)
{

myClientSocket.Send(Encoding.UTF8.GetBytes(data));
Console.WriteLine("发送数据为:" + data);
receive = null;
data = null;
}



}

}
catch (Exception ex)
{
}
}



private void Receive(object i)
{
Socket clientSocket = i as Socket;

//byte[] //图像数据
//通过clientSocket接收数据
int receiveNumber = clientSocket.Receive(result);
receive = Encoding.UTF8.GetString(result, 0, receiveNumber);

Console.WriteLine("接收客户端{0}消息{1}" + clientSocket.RemoteEndPoint.ToString() + Encoding.UTF8.GetString(result, 0, receiveNumber));

}

//-----------------------------------------------------------------------------------------------


private void Worker1_DoWork(object sender, DoWorkEventArgs e)
{
try
{
//服务器IP地址
IPAddress ip = IPAddress.Any;
serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
serverSocket.Bind(new IPEndPoint(ip, myProt1)); //绑定IP地址:端口
serverSocket.Listen(100); //设定最多100个排队连接请求

Console.WriteLine("启动监听{0}成功" + serverSocket.LocalEndPoint.ToString());//???
//while (true)
//{

Thread thread = new Thread(ListenClientConnect1);
thread.IsBackground = true;
thread.Start(serverSocket);
//}
}
catch { }
}

void ListenClientConnect1(object o)
{
try
{
Socket myClientSocket1 = o as Socket;

while (true)
{
Socket clientSocket1 = myClientSocket1.Accept();
Thread thread = new Thread(Receive1);
thread.IsBackground = true;
thread.Start(clientSocket1);
//if (data != null)
//{
data1 = "123";
clientSocket1.Send(Encoding.UTF8.GetBytes(data1));
Console.WriteLine("发送数据为:" + data1);
//}
}

}
catch (Exception ex)
{
}
}

private void Receive1(object o)
{
Socket clientSocket1 = o as Socket;
receive = null;
//byte[] //图像数据
//通过clientSocket接收数据
int receiveNumber = clientSocket1.Receive(result);
receive = Encoding.UTF8.GetString(result, 0, receiveNumber);

Console.WriteLine("接收客户端{0}消息{1}" + clientSocket1.RemoteEndPoint.ToString() + Encoding.UTF8.GetString(result, 0, receiveNumber));

}
}
}

...全文
543 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
yc_learner 2018-12-19
  • 打赏
  • 举报
回复
用websocket解决了问题,websocket可以连接多个servive,开启多个会话,能够支持多连接
  • 打赏
  • 举报
回复
没有看你的代码。主要是因为整个概念有问题,就不需要看代码了。 服务器假设有1万客户端实时连接,难道要开1万个端口?服务器端只要开一个端口。你为什么要开两个端口呢?
yc_learner 2018-11-15
  • 打赏
  • 举报
回复
引用 2 楼 sp1234 的回复:
没有看你的代码。主要是因为整个概念有问题,就不需要看代码了。

服务器假设有1万客户端实时连接,难道要开1万个端口?服务器端只要开一个端口。你为什么要开两个端口呢?


worker是要长连接一个固定的在UWP的客户端,worker1才是接收客户发送的数据的,只不过两个socket端口的数据交互还没完成,运行后,数据就串了

17,741

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 .NET Framework
社区管理员
  • .NET Framework社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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