C#实现套接字发送接收数据
作者:普通还不自信的程序员 发布时间:2023-01-09 19:34:38
标签:C#,套接字,数据
本文实例为大家分享了C#实现套接字发送接收数据的具体代码,供大家参考,具体内容如下
服务端
namespace TestServer
{
public partial class ServerForm : Form
{
Socket socketSend;
// 将远程连接的客户端的IP地址和socket存入集合
Dictionary<string, Socket> dicSocket = new Dictionary<string, Socket>();
public ServerForm()
{
InitializeComponent();
}
private void btnStart_Click(object sender, EventArgs e)
{
try
{
// 当点击开始监听后,在服务器创建一个负责监听IP地址和端口号的socket
Socket socketWatch = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
IPAddress ip = IPAddress.Any;//;IPAddress.Parse(txtServer.Text)
IPEndPoint point = new IPEndPoint(ip, Convert.ToInt32(txtPort.Text));
// 监听
socketWatch.Bind(point);
ShowMsg("监听成功");
socketWatch.Listen(10);
Thread th = new Thread(Listen);
th.IsBackground = true;
th.Start(socketWatch);
}
catch { }
}
void Listen(object o)
{
// 等待客户端连接 并创建一个负责通信的Socket
Socket socketWatch = o as Socket;
while (true)
{
socketSend = socketWatch.Accept();
dicSocket.Add(socketSend.RemoteEndPoint.ToString(),socketSend);
cboUsers.Items.Add(socketSend.RemoteEndPoint.ToString());
ShowMsg(socketSend.RemoteEndPoint.ToString() + " : " + "连接成功");
Thread th = new Thread(Recive);
th.IsBackground = true;
th.Start(socketSend);
}
}
void Recive(object o)
{
socketSend = o as Socket;
while (true)
{
// 客户端连接成功后,服务器应接受客户端发来的消息
byte[] buffer = new byte[1024 * 1024 * 2];
// 实际接收到的有效字节数
int r = socketSend.Receive(buffer);
if (r == 0)
{
break;
}
string str = Encoding.UTF8.GetString(buffer, 0, r);
ShowMsg(socketSend.RemoteEndPoint + " : " + str);
}
}
void ShowMsg(string str)
{
txtLog.AppendText(str + "\r\n");
}
private void Form1_Load(object sender, EventArgs e)
{
Control.CheckForIllegalCrossThreadCalls = false;
}
private void btnSend_Click(object sender, EventArgs e)
{
string str = txtMsg.Text;
byte[] buffer = Encoding.UTF8.GetBytes(str);
string ip = cboUsers.SelectedItem.ToString();
dicSocket[ip].Send(buffer);
//socketSend.Send(buffer);
txtMsg.Text = "";
}
private void btnSendUser_Click(object sender, EventArgs e)
{
string json = JsonConvert.SerializeObject(UserList());
byte[] buffer = Encoding.UTF8.GetBytes(json);
socketSend.Send(buffer);
}
private List<User> UserList()
{
List<User> userList = new List<User>();
User user = null;
string sql = "select * from user_table";
SqlCommand cmd = SqlUtils.ConnectSql(sql);
SqlDataReader sdr = cmd.ExecuteReader();
while (sdr.Read())
{
user = new User(sdr.GetInt32(0), sdr.GetString(1), sdr.GetString(2), sdr.GetInt32(3));
userList.Add(user);
}
return userList;
}
}
}
客户端
namespace TestClient
{
public partial class ClientForm : Form
{
Socket socketSend;
public ClientForm()
{
InitializeComponent();
}
private void btnStart_Click(object sender, EventArgs e)
{
try
{
// 创建负责通信的socket
socketSend = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
IPAddress ip = IPAddress.Parse(txtServer.Text);
IPEndPoint point = new IPEndPoint(ip,Convert.ToInt32(txtPort.Text));
socketSend.Connect(point);
ShowMsg("连接成功");
Thread th = new Thread(Recive);
th.IsBackground = true;
th.Start();
}
catch { }
}
void Recive()
{
while (true)
{
// 客户端连接成功后,服务器应接受客户端发来的消息
byte[] buffer = new byte[1024 * 1024 * 2];
// 实际接收到的有效字节数
int r = socketSend.Receive(buffer);
if (r == 0)
{
break;
}
string str = Encoding.UTF8.GetString(buffer, 0, r);
ShowMsg(socketSend.RemoteEndPoint + " : " + str);
}
}
void ShowMsg(string str)
{
txtLog.AppendText(str + "\r\n");
}
private void Form1_Load(object sender, EventArgs e)
{
Control.CheckForIllegalCrossThreadCalls = false;
}
private void btnSend_Click(object sender, EventArgs e)
{
string str = txtMsg.Text.Trim();
byte[] buffer = Encoding.UTF8.GetBytes(str);
socketSend.Send(buffer);
txtMsg.Text = "";
}
}
}
效果
发送json数据
来源:https://blog.csdn.net/qq_41841482/article/details/114441393


猜你喜欢
- 1. 只有public的property能显示出来,可以通过BrowsableAttribute来控制是否显示,通过CategoryAttr
- 健康检查是Spring Boot Actuator中重要端点之一,可以非常容易查看应用运行至状态。本文在前文的基础上介绍如何自定义健康检查。
- 我们在想对一个可枚举的对象集合进行去重操作时,一般第一个想到的就是就是Linq的Distinct方法。先定义一个类,然后使用Distinct
- 单纯使用GridView通用的两种给GridView 添加分割线的方法;http://stackoverflow.com/questions
- 本篇文章介绍SpringBoot的上传和下载功能。一、创建SpringBoot工程,添加依赖compile("org.spring
- /// 构造随机数 种子static int GetRandomSeed(){ byte[] byt
- 实现步骤step1:添加乐观锁 * MP的其他 * 功能可以参考官网@Beanpublic MybatisPlusInterceptor m
- 一、基本RPC框架简介在分布式计算中,远程过程调用(Remote Procedure Call,缩写 RPC)允许运行于一台计算机的程序调用
- 本文实例为大家分享了springboot实现异步任务的具体代码,供大家参考,具体内容如下1.什么异步任务同步:一定要等任务执行完了,得到结果
- 我们知道java程序是运行在JVM中的,而JVM就是构建在内存上的虚拟机,那么内存模型JMM是做什么用的呢?我们考虑一个简单的赋值问题:in
- 在java中的整数类型有四种,分别是 byte short int long 其中byte只有一个字节 0或1,在此不详细讲解。
- 一、项目需求二、项目思路1、菜单制作2、中奖号码生成 getNumber (随机数 Math.random)3、购买号码和中奖号码比对 生成
- 1.URI与URLURI(Uniform Resource Identifier,统一资源标志符),表示web上的每一种可用资源,具体的东西
- 在maven的pom.xml里面添加一下依赖:<properties><project.build.sourceEncod
- 本文为大家分享了Toast类避免显示时间叠加的方法,供大家参考,具体内容如下import android.app.Activity;impo
- 本文实例讲述了Java实现的模糊匹配某文件夹下的文件并删除功能。分享给大家供大家参考,具体如下:package com.wyebd.gis;
- 【说明】 TextView是用来显示文本的组件。以下介绍的是XML代码中的属性,在java代码中同样可通过 ”组件名.setXXX()方法设
- 目录一、简述二、内容一、简述利用C# TcpClient在局域网内传输文件,可是文件发送到对面的时候却要重新命名文件的。那可不可以连着文件名
- 一、概述IDEA自带的注释模板一般都很简单,然而我们在写代码的时候喜欢把类注释和文档注释写在代码里,既方便自己看所有的参数,也便于以后维护代
- public class MainActivity extends Activity { public RadioGroup mR