Socket服务器和客户端

news/2025/3/17 20:20:23/

服务器

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;namespace socket服务器
{public partial class Form1 : Form{public Form1(){InitializeComponent();}/// <summary>/// 开始监听/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void button1_Click(object sender, EventArgs e){//1创建套接字//1 AddressFamily.InterNetwork ipv4的地址//2 SocketType.Stream 数据格式 以数据流的方式传输//3 ProtocolType.Tcp 采用的协议Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);//2 绑定ip和端口号IPAddress ip =IPAddress.Parse(textBox1.Text); //创建ip//1 ip地址//2 端口号IPEndPoint point = new IPEndPoint(ip,int.Parse(textBox2.Text));socket.Bind(point);// 绑定端口号//3监听端口号socket.Listen(1000);//4 接收客户端发来的连接消息 创建线程进行接收Thread th = new Thread(Connect);th.Start(socket);//开启线程传递socket}public void Connect(object o){Socket s1 = o as Socket;try{while (true) //接收客户端连接{Socket c1 = s1.Accept();//接收客户端连接//c1是客户端//s1是服务器this.Invoke(new Action(() =>{richTextBox1.Text += $"{DateTime.Now.ToString("F")}-{c1.RemoteEndPoint}-连接成功"+"\n";}));//5收发数据 写在线程里面Thread t2 = new Thread(ReceiveMsg);t2.Start(c1);}}catch (Exception){throw;}}//接收消息的线程方法Socket ss = null;public void ReceiveMsg(object o){ss = o as Socket;try{byte[] buffer = new byte[1024];//定义缓存区 长度1024while (true)//一直接收数据{int length =  ss.Receive(buffer); //接收数据实际长度 string str = Encoding.UTF8.GetString(buffer, 0, length);//显示到界面上this.Invoke(new Action(() =>{richTextBox1.Text += $"接收到来自客户端的消息:"+str + "\r\n";}));//6 服务器转发消息}}catch (Exception){Console.WriteLine("客户端下线");}}/// <summary>/// 发消息/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void button3_Click(object sender, EventArgs e){if (ss != null){byte[] bs = Encoding.UTF8.GetBytes(textBox3.Text);richTextBox1.Text += $"服务器发送的消息:" + textBox3.Text +"\n";ss.Send(bs); //发送客户端}}/// <summary>/// 断开连接/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void button2_Click(object sender, EventArgs e){}}
}

客户端 

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;namespace _2socket客户端
{public partial class Form1 : Form{public Form1(){InitializeComponent();}/// <summary>/// 连接服务器/// </summary>/// <param name="sender"></param>/// <param name="e"></param>Socket socket = null;private void button2_Click(object sender, EventArgs e){//1创建socket客户端对象socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);//2 连接指定服务器socket.Connect(new IPEndPoint(IPAddress.Parse("192.168.107.14"), 3030));//3 接收服务器发的消息Thread th = new Thread(ReceiveMsg);th.Start();}//接收服务器发来的消息public void ReceiveMsg(){try{byte[]  buffer = new byte[1024];while (true){int length =  socket.Receive(buffer); //接收服务器数据,保存buffer数组string str =  Encoding.UTF8.GetString(buffer, 0, length);this.Invoke(new Action(() =>{richTextBox1.Text += str + "\n";}));}}catch (Exception){throw;}}//发送消息private void button1_Click(object sender, EventArgs e){//4 发送消息Thread th = new Thread(SendMsg);th.Start();}//发消息的线程方法public void SendMsg(){if(socket!=null){byte[] bs = Encoding.UTF8.GetBytes(textBox1.Text);// 获取输入框文本并且转成字节数组socket.Send(bs);}}}
}

文章来源:https://blog.csdn.net/zoushier/article/details/146256398
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ppmy.cn/news/1579899.html

相关文章

【模拟算法】

目录 替换所有的问号 提莫攻击 Z 字形变换 外观数列 数青蛙&#xff08;较难&#xff09; 模拟算法&#xff1a;比葫芦画瓢。思路较简单&#xff0c;考察代码能力。 1. 模拟算法流程&#xff0c;一定要在演草纸上过一遍流程 2. 把流程转化为代码 替换所有的问号 1576. 替…

怎么解决在Mac上每次打开文件夹都会弹出一个新窗口的问题

在Mac上每次打开文件夹都会弹出一个新窗口的问题&#xff0c;可以通过以下方法解决‌ ‌调整Finder设置‌&#xff1a; 打开Finder&#xff0c;点击“Finder”菜单&#xff0c;选择“偏好设置”。在偏好设置中&#xff0c;选择“通用”标签。取消勾选“在标签页中打开文件夹”或…

搭建刷题专业版小程序系统

在这个知识竞争激烈的时代&#xff0c;无论是准备职业资格考试&#xff0c;还是为了学业提升&#xff0c;刷题都是必不可少的学习环节。然而&#xff0c;面对市面上五花八门的刷题小程序&#xff0c;盗版多、功能不完善、二次开发困难等问题层出不穷。今天&#xff0c;就给大家…

【金融杂谈】价格内卷死局——谁造成了价格内卷?

谁造成了价格的内卷&#xff1f; 今天聊一下&#xff0c;我眼里国内价格内卷的成因。 社会的进步和发展源于商品贸易的繁荣&#xff0c;这既改善了人们的生活品质&#xff0c;又创造了价值&#xff0c;给大部分人提供了工作岗位和生活基本工资&#xff0c;还发展了各种民用科…

TS常见内置映射类型的实现及应用场景

以下是 TypeScript 在前端项目中 常用的映射类型&#xff08;Mapped Types&#xff09;&#xff0c;结合具体场景和代码示例&#xff0c;帮助开发者高效处理复杂类型&#xff1a; 一、基础映射类型 1. Partial<T> 作用&#xff1a;将对象类型 T 的所有属性变为可选。 实…

计算机毕业设计:基于Android和SNS的音乐星球软件

基于Android和SNS的音乐星球软件的设计与实现mysql数据库创建语句 基于Android和SNS的音乐星球软件的设计与实现oracle数据库创建语句基于Android和SNS的音乐星球软件的设计与实现sqlserver数据库创建语句基于Android和SNS的音乐星球软件的设计与实现springspringMVChibernate…

Linux常用命令速查手册

Linux常用命令速查手册 Linux常用命令速查手册1. 文件和目录操作1.1 查看当前目录&#xff08;pwd&#xff09;1.2 切换目录&#xff08;cd&#xff09;1.3 列出目录内容&#xff08;ls&#xff09;1.4 创建目录&#xff08;mkdir&#xff09;1.5 删除文件和目录&#xff08;rm…

工程实践:如何使用SU17无人机来实现室内巡检任务

阿木实验室最近发布了科研开发者版本的无人机SU17&#xff0c;该无人机上集成了四目视觉&#xff0c;三维激光雷达&#xff0c;云台吊舱&#xff0c;高算力的机载计算机&#xff0c;是一个非常合适的平台用于室内外巡检场景。同时阿木实验室维护了多个和无人机相关的开源项目。…