C# Socket通讯问题
这是监听连接代码片段
private void Startsocket()
{
try
{
IPAddress ip = IPAddress.Any;
//当开始监听时候,在服务器创建一个负责IP地址跟端口号的Socket
socketWatch = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
IPEndPoint point = new IPEndPoint(ip, 9090);
//监听
socketWatch.Bind(point);
//连接数量为10个
socketWatch.Listen(10);
}
catch { throw; }
}这是客户端连接处理片段
public void ListenClickConnect(object o)
{
Socket socketWatch = o as Socket;
//等待用户连接创建一个负责通信的Socket
while (true)
{
//最大连接数
int number = 10;
if (disSocket.Count > number)
{
socketWatch.Close();
socketWatch.Dispose();
ShowMsg("连接数量已达到上限");
}
try
{
//关闭服务器时 跳出循环
if (stop)
{
break;
}
//等到客户端新的连接
socketSend = socketWatch.Accept();
//将远程客户端IP地址存储到泛型集合中
disSocket.Add(socketSend.RemoteEndPoint.ToString(), socketSend);
Thread th = new Thread(Receive);
th.IsBackground = true;
th.Start(socketSend);
ShowMsg(socketSend.RemoteEndPoint.ToString() + ":" + "连接成功");
//timer.Start();
AddKJ();
}
catch { break; }
}
这是关闭服务器代码片段
bool stop = false;
private void Stop_Click(object sender, RoutedEventArgs e)
{
for (int i = 0; i <= namenumber; i++)
{
Image images = gridcontrol.FindName("image" + i) as Image;
Label label = gridcontrol.FindName("label" + i) as Label;
if (images != null)
{
gridcontrol.Children.Remove(images);
gridcontrol.UnregisterName("image" + i);
gridcontrol.Children.Remove(label);
gridcontrol.UnregisterName("label" + i);
}
Image image = gridcontrol.FindName("image") as Image;
image.Visibility = Visibility.Visible;
}
ShowMsg("关闭服务");
if (startandstop == false)
{
startandstop = true;
startbut.IsEnabled = true;
stopbut.IsEnabled = false;
startbut.Background = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#FF5B93E4"));
stopbut.Background = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#FFF7CDCD"));
}
//断开通讯和关闭监听
if (socketSend != null && socketSend.Connected)
{
socketSend.Shutdown(SocketShutdown.Both);
socketSend.Close();
socketSend.Dispose();
stop = true;
socketWatch.Close();
socketWatch.Dispose();
disSocket.Clear();
}
else
{
stop = true;
socketWatch.Close();
socketWatch.Dispose();
}
}接收客户端发来的信息片段
int erro = 0;
private void Receive(object o)
{
socketSend = o as Socket;
while (true)
{
try
{
//客户端连接成功后服务器接收发来消息
byte[] buffer = new byte[1024 * 1024 * 2];
//实际接收有效字节数
int r = socketSend.Receive(buffer);
if (r == 0)
{
erro += 1;
Erroe(erro);
break;
}
string str = Encoding.UTF8.GetString(buffer, 0, r);
ShowMsg(str);
SendData(str);
}
catch
{
break;
}
}
}这是运行界面

相关推荐
C# Socket通讯常见问题详解
C# Socket通信三大问题之数据包界限符问题。 根据原项目中交通部标准,在连续观测站中数据包中,使用??两个字符表示有效数据包开始和结束。实际项目有各自的具体技术规范 C# Socket通信三
C# TIPTOP电子看板实战:从Socket通讯到UI卡顿问题根治
在工业数字化与车间管理中,数据采集与可视化看板是连接计划侧与执行侧的关键环节。电子看板的核心价值在于将工单进度、产量与异常信息实时呈现,消除信息滞后与数据口径不一致问题。实现此类系统,通常需要掌握上位机开发中的几项基础技术:TCP长连接与粘包处理、扫码枪数据触发、循环采集中UI刷新优化、断线重连与缓存机制。以C#语言为例,其成熟的WinForm界面框架、丰富的工业SDK支持,以及强类型特性,使其成为Windows生态下对接TIPTOP等ERP系统的首选。从TCP协议解析到生产者消费者模式的应用,这些技术原理
C# Socket通讯框架,封装了Client和Server端类库,带实例
在这个C# Socket通讯框架中,开发者可以利用封装好的Client和Server端类库,大大简化了网络编程的工作。通常,Server端会创建一个监听Socket,等待客户端连接。
c# socket同步通讯 异步通讯 客户端 服务端 实例
C#作为.NET框架的一部分,提供了强大的Socket编程接口,使得开发者能够创建高效、可靠的网络应用程序。本文将深入探讨C#中的Socket同步通讯与异步通讯,以及如何构建客户端和服务端程序。
即时通讯框架(socket 异步通讯)
异步Socket编程是C#中处理网络I/O操作的一种重要方式。它解决了同步操作可能导致的阻塞问题,使得程序在等待数据传输时可以执行其他任务,提高了系统资源利用率和程序响应速度。


