c#简单的socket通讯demo

简介: 代码 using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.
img_1c53668bcee393edac0d7b3b3daff1ae.gif img_405b18b4b6584ae338e0f6ecaf736533.gif 代码
 
  
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.Net.Sockets;
using System.Runtime.Serialization.Formatters.Binary;
using System.Threading;

namespace ClientSocket
{
class Program
{
private static Socket ServersClientSocket; // 服务端得到的客户端的SOCKET
private static Socket ClientSocket; // 客户端Socket
private static object lockHelper = new object ();
/// <summary>
/// 开启服务端
/// </summary>
private static void StartAccept()
{
IPEndPoint ipep
= new IPEndPoint(IPAddress.Parse( " 192.168.3.18 " ), 1005 );
Socket server
= new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
// 下一句 设置SOCKET允许多个SOCKET访问同一个本地IP地址和端口号
// server.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);
server.Bind(ipep);
server.Listen(
60 ); // 非阻塞方法
while ( true )
{
try
{
Console.WriteLine(
" server:being listen " );
ServersClientSocket
= server.Accept(); // 阻塞方法
Console.WriteLine( " server:accept one link " );
Thread t
= new Thread( new ThreadStart(StartReceive));
t.Start();
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
}
}
/// <summary>
/// 服务端开始接收数据
/// </summary>
private static void StartReceive()
{
IPEndPoint clientep
= (IPEndPoint)ServersClientSocket.RemoteEndPoint;
while ( true )
{
var message
= RecevieMessage();
Console.WriteLine(
" server:the client send message is:\n " + message);
}
}
/// <summary>
/// 客户端开始连接服务端
/// </summary>
private static void StartConnect()
{
IPEndPoint ipep
= new IPEndPoint(IPAddress.Parse( " 192.168.3.18 " ), 1005 );
ClientSocket
= new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
ClientSocket.Connect(ipep);
while ( true )
{
Console.WriteLine(
" client:please put your message in: " );
string msg = Console.ReadLine();
byte [] data = Encoding.Unicode.GetBytes(msg);
SendMessage(data);
}
}
/// <summary>
/// 发送消息
/// </summary>
/// <param name="msg"></param>
private static void SendMessage( byte [] data)
{
int total = 0 ;
int size = data.Length;
int dataleft = size;
int sent;
byte [] datasize = new byte [ 4 ];
datasize
= BitConverter.GetBytes(size);
ClientSocket.Send(datasize);
Console.WriteLine(
" 发送的数据长度: " + size.ToString());
while (total < size)
{
sent
= ClientSocket.Send(data, total, dataleft, SocketFlags.None);
total
+= sent;
dataleft
-= sent;
}
}
/// <summary>
/// 接收消息
/// </summary>
private static string RecevieMessage()
{
int total = 0 ;
int recv;
byte [] datasize = new byte [ 4 ];
recv
= ServersClientSocket.Receive(datasize, 0 , 4 , SocketFlags.None);
int size = BitConverter.ToInt32(datasize, 0 );
int dataleft = size;
byte [] data = new byte [size];
while (total < size)
{
recv
= ServersClientSocket.Receive(data, total, dataleft, SocketFlags.None);
if (recv == 0 )
{
data
= null ;
break ;
}
total
+= recv;
dataleft
-= recv;
}
if (data == null )
{
return " error " ;
}
string result = Encoding.Unicode.GetString(data.Take( 36 ).ToArray());
return result;
}
/// <summary>
/// 入口函数
/// </summary>
/// <param name="args"></param>
static void Main( string [] args)
{
Thread t
= new Thread( new ThreadStart(StartAccept));
t.Start();
Thread.Sleep(
3000 ); // 等待服务线程开始工作
Thread t2 = new Thread(StartConnect);
t2.Start();
while ( true )
{
ConsoleKeyInfo a
= Console.ReadKey();
if (a.KeyChar == ' + ' )
{
System.Environment.Exit(
0 );
}
}
}
}
}

代码中注释比较多
如果仍旧看不懂请看JimmyZhang的这篇文章
http://www.cnblogs.com/JimmyZhang/archive/2008/09/07/1286300.html
讲的很细很基础

目录
相关文章
|
6月前
|
数据处理 C# C++
如何使用C#和C++结构体实现Socket通信
如何使用C#和C++结构体实现Socket通信
268 0
|
安全 网络协议 网络安全
http https socket通讯详解?
http https socket通讯详解?
104 0
|
25天前
|
C# 开发者
C# 一分钟浅谈:Socket 编程基础
【10月更文挑战第7天】本文介绍了Socket编程的基础知识、基本操作及常见问题,通过C#代码示例详细展示了服务器端和客户端的Socket通信过程,包括创建、绑定、监听、连接、数据收发及关闭等步骤,帮助开发者掌握Socket编程的核心技术和注意事项。
81 3
C# 一分钟浅谈:Socket 编程基础
|
14天前
|
消息中间件 网络协议 C#
C#使用Socket实现分布式事件总线,不依赖第三方MQ
`CodeWF.EventBus.Socket` 是一个轻量级的、基于Socket的分布式事件总线系统,旨在简化分布式架构中的事件通信。它允许进程之间通过发布/订阅模式进行通信,无需依赖外部消息队列服务。
C#使用Socket实现分布式事件总线,不依赖第三方MQ
|
26天前
|
网络协议 机器人 C++
KUKA机器人Socket通讯配置方法:技术干货分享
【10月更文挑战第7天】在现代自动化生产线上,KUKA机器人凭借其高效、灵活和精确的特点,成为众多企业的首选。为了实现KUKA机器人与其他设备或系统之间的数据交互,Socket通讯配置显得尤为重要。本文将详细介绍KUKA机器人Socket通讯的配置方法,帮助大家在工作中更好地掌握这一技术。
142 2
|
5月前
|
缓存 网络协议 Linux
c++实战篇(三) ——对socket通讯服务端与客户端的封装
c++实战篇(三) ——对socket通讯服务端与客户端的封装
111 0
|
30天前
|
物联网 C#
【C#】简单的蓝牙通讯功能实现
【C#】简单的蓝牙通讯功能实现
25 0
|
6月前
|
算法 Linux 调度
xenomai内核解析--xenomai与普通linux进程之间通讯XDDP(一)--实时端socket创建流程
xenomai与普通linux进程之间通讯XDDP(一)--实时端socket创建流程
445 1
xenomai内核解析--xenomai与普通linux进程之间通讯XDDP(一)--实时端socket创建流程
|
5月前
|
Java
java使用ServerSocket和Socket实现客户端与服务端通讯
java使用ServerSocket和Socket实现客户端与服务端通讯
|
5月前
|
监控 网络协议 C#
一款基于C#开发的通讯调试工具(支持Modbus RTU、MQTT调试)
一款基于C#开发的通讯调试工具(支持Modbus RTU、MQTT调试)