开发语言:C#
源码大小:89KB
本次赞助金额为:9 元
嘿,亲!知识可是无价之宝呢,但咱这精心整理的资料也耗费了不少心血呀。小小地破费一下,绝对物超所值哦!如有编译问题可以找我解决。QQ:78630559
源码大小:89KB
本次赞助金额为:9 元
嘿,亲!知识可是无价之宝呢,但咱这精心整理的资料也耗费了不少心血呀。小小地破费一下,绝对物超所值哦!如有编译问题可以找我解决。QQ:78630559
1、先启动服务端 IP和端口都为服务端
2、客户端连接到服务端 IP和端口都为服务端
3、客户端发送信息到服务端
以下是原理图
以下是Socket服务端核心代码
//原创来自 http://www.luofenming.com/show.aspx?id=ART2018120700001
/// <summary>
/// 创建Scoket 服务端
/// </summary>
/// <param name="IP"></param>
/// <param name="prot"></param>
/// <returns></returns>
public Socket CreateSocket(string IP, string prot)
{
//定义一个套接字用于监听客户端发来的信息 包含3个参数(IP4寻址协议,流式连接,TCP协议)
Socket socketWatch = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
//发送信息 需要1个IP地址和端口号
IPAddress ipaddress = IPAddress.Parse(IP); //获取文本框输入的IP地址
//将IP地址和端口号绑定到网络节点endpoint上
IPEndPoint endpoint = new IPEndPoint(ipaddress, int.Parse(prot)); //获取文本框上输入的端口号
//套接字点听绑定网络端点
socketWatch.Bind(endpoint);
//将套接字的监听队列长度设置为20
socketWatch.Listen(20);
return socketWatch;
}
/// <summary>
/// 创建一个负责监听客户端的线程 并启动
/// </summary>
/// <returns></returns>
public void CreateThread(Socket socket)
{
//创建一个负责监听客户端的线程
Thread threadWatch = new Thread(new ParameterizedThreadStart(WatchConnecting));
//将窗体线程设置为与后台同步
threadWatch.IsBackground = true;
//启动线程
threadWatch.Start(socket);
}
/// <summary>
/// 持续不断监听客户端发来的请求, 用于不断获取客户端发送过来的连续数据信息
/// </summary>
private void WatchConnecting(object socket)
{
Socket socketWatch = socket as Socket;
while (true)
{
Socket socConnection = null;
try
{
socConnection = socketWatch.Accept();
//((IPEndPoint)socConnection.RemoteEndPoint).Address.ToString();//获取客户端IP
//((IPEndPoint)socConnection.RemoteEndPoint).Port.ToString();//获取客户端端口
}
catch (Exception ex)
{
break;//提示套接字监听异常 ex.Message
}
//创建通信线程
ParameterizedThreadStart pts = new ParameterizedThreadStart(ServerRecMsg);
Thread thr = new Thread(pts);
thr.IsBackground = true;
//启动线程
thr.Start(socConnection);
}
}
/// <summary>
/// 接收客户端发来的信息
/// </summary>
private void ServerRecMsg(object socketClientPara)
{
Socket socketServer = socketClientPara as Socket;
int ReceiveBufferSize = 8 * 1024;
while (true)
{
int firstReceived = 0;
byte[] buffer = new byte[ReceiveBufferSize];
try
{
List<byte> ls = new List<byte>();
//获取接收的数据,并存入内存缓冲区 返回一个字节数组的长度
if (socketServer != null) firstReceived = socketServer.Receive(buffer);
if (firstReceived > 0) //接受到的长度大于0 说明有信息或文件传来
{
ls.AddRange(buffer.Skip(0).Take(firstReceived));
//对接收数据进行逻辑判断 回复客户端需要的数据
string msg = "接收成功" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "\r\n";
byte[] datas = System.Text.Encoding.UTF8.GetBytes(msg);
socketServer.Send(datas);//小数据可以一次性发送 如果大数据要分端发送 用while 循环
}
}
catch (Exception ex)
{
break; //捕获异常信息 ex.Message
}
}
}
//启动服务端
private void button1_Click(object sender, EventArgs e)
{
//textBox1.Text 为服务端IP textBox2.Text 为服务端端口
Socket testSocket = CreateSocket(textBox1.Text, textBox2.Text);
CreateThread(testSocket);
}以下是客户端核心代码
//原创来自 http://www.luofenming.com/show.aspx?id=ART2018120700001
/// <summary>
/// 创建Scoket 客户端
/// </summary>
/// <param name="IP"></param>
/// <param name="prot"></param>
/// <returns></returns>
public Socket CreateSocket(string IP, string prot)
{
//定义一个套接字用于监听客户端发来的信息 包含3个参数(IP4寻址协议,流式连接,TCP协议)
Socket socketClient = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
//发送信息 需要1个IP地址和端口号
IPAddress ipaddress = IPAddress.Parse(IP); //获取文本框输入的IP地址
//将IP地址和端口号绑定到网络节点endpoint上
IPEndPoint endpoint = new IPEndPoint(ipaddress, int.Parse(prot)); //获取文本框上输入的端口号
//向指定的ip和端口号的服务端发送连接请求 用的方法是Connect 不是Bind
socketClient.Connect(endpoint);
return socketClient;
}
/// <summary>
/// 创建一个接收服务端发来信息的 线程并启动
/// </summary>
/// <param name="socket"></param>
private void CreateThread(Socket socket)
{
//创建一个新线程 用于监听服务端发来的信息
Thread threadClient = new Thread(RecMsg);
//将窗体线程设置为与后台同步
threadClient.IsBackground = true;
//启动线程
threadClient.Start(socket);
}
/// <summary>
/// 接受服务端发来信息的方法
/// </summary>
private void RecMsg(object socket)
{
Socket socketClient = socket as Socket;
int SendBufferSize = 2 * 1024;
while (true) //持续监听服务端发来的消息
{
int length = 0;
byte[] buffer = new byte[SendBufferSize];
try
{
length = socketClient.Receive(buffer);
}
catch (Exception ex)
{
break;
}
//将套接字获取到的字节数组转换为人可以看懂的字符串
string strRecMsg = Encoding.UTF8.GetString(buffer, 0, length);
}
}
Socket socket;
/// <summary>
/// 连接服务端
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button1_Click(object sender, EventArgs e)
{
//textBox1.Text 为服务端IP textBox2.Text 为服务端端口
socket = CreateSocket(textBox1.Text, textBox2.Text);
CreateThread(socket);
}
/// <summary>
/// 发送信息到服务端
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button2_Click(object sender, EventArgs e)
{
if (socket != null && socket.Connected)
{
socket.Send(new byte[] { 0x11, 0x22, 0x33, 0x44, 0x55 });
}
}视频教程,点击进入B站可以看高清视频