基于C#的Socket网络编程
服务端
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
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 _01serverFrm
{
public partial class serverFrm : Form
{
public serverFrm()
{
InitializeComponent();
}
private void btnListen_Click(object sender, EventArgs e)
{
Socket socketWatch = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
IPAddress ip = IPAddress.Any;
IPEndPoint point = new IPEndPoint(ip,Convert.ToInt32(txtPort.Text));
socketWatch.Bind(point);
socketWatch.Listen(10);
ShowMsg("监听成功!");
Thread th = new Thread(Listen);
th.IsBackground=true;
th.Start(socketWatch);
}
Dictionary<string,Socket> dicSocket = new Dictionary<string,Socket>();
void Listen(object o)
{
Socket socketWatch = o as Socket;
while (true)
{
Socket socketSend = socketWatch.Accept();
dicSocket.Add(socketSend.RemoteEndPoint.ToString(), socketSend);
cboAddress.Items.Add(socketSend.RemoteEndPoint.ToString());
cboAddress.SelectedIndex = 0;
ShowMsg(socketSend.RemoteEndPoint.ToString() + ":" + "连接成功");
Thread th = new Thread(Receive);
th.IsBackground = true;
th.Start(socketSend);
}
}
void Receive(object o)
{
Socket socketSend = o as Socket;
while (true)
{
byte[] buffer = new byte[1024];
int r = socketSend.Receive(buffer);
if (r == 0)
{
break;
}
string str = Encoding.UTF8.GetString(buffer, 0, r);
ShowMsg(socketSend.RemoteEndPoint.ToString() + ":" + str);
}
}
void ShowMsg(string str)
{
txtLog.AppendText(str + "\r\n");
}
private void serverFrm_Load(object sender, EventArgs e)
{
Control.CheckForIllegalCrossThreadCalls = false;
}
private void btnSend_Click(object sender, EventArgs e)
{
byte[] buffer = Encoding.UTF8.GetBytes(txtConversation.Text);
List<byte> list = new List<byte>();
list.Add(0);
list.AddRange(buffer);
byte[] newBuffer = list.ToArray();
dicSocket[cboAddress.SelectedItem.ToString()].Send(newBuffer);
txtConversation.Text = "";
}
private void btnChoose_Click(object sender, EventArgs e)
{
using (OpenFileDialog ofd = new OpenFileDialog() )
{
ofd.Title = "请选择文件";
ofd.ShowDialog();
txtFile.Text = ofd.FileName;
}
}
private void btnSendFile_Click(object sender, EventArgs e)
{
using (FileStream fs = new FileStream(txtFile.Text,FileMode.OpenOrCreate,FileAccess.Read))
{
byte[] buffer = new byte[1024*1024*3];
int r = fs.Read(buffer, 0, buffer.Length);
List<byte> list = new List<byte>();
list.Add(1);
list.AddRange(buffer);
byte[] newBuffer = list.ToArray();
dicSocket[cboAddress.SelectedItem.ToString()].Send(newBuffer, 0, r + 1, SocketFlags.None);
}
}
private void btnTremble_Click(object sender, EventArgs e)
{
byte[] buffer = new byte[1];
buffer[0] = 2;
dicSocket[cboAddress.SelectedItem.ToString()].Send(buffer);
}
}
}
客户端
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
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 _02clientFrm
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
Socket socketConnection;
private void btnConnection_Click(object sender, EventArgs e)
{
socketConnection = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
IPAddress ip = IPAddress.Parse(txtAddress.Text);
IPEndPoint point = new IPEndPoint(ip, Convert.ToInt32(txtPort.Text));
socketConnection.Connect(point);
ShowMsg("连接成功,连接到"+socketConnection.RemoteEndPoint.ToString());
Thread th = new Thread(Receive);
th.IsBackground = true;
th.Start();
}
void ShowMsg(string str)
{
txtLog.AppendText(str + "\r\n");
}
private void btnSend_Click(object sender, EventArgs e)
{
byte[] buffer = new byte[1024];
buffer = Encoding.UTF8.GetBytes(txtConversation.Text);
socketConnection.Send(buffer);
txtConversation.Text = "";
}
void Receive()
{
while (true)
{
byte[] buffer = new byte[1024*1024*3];
int r = socketConnection.Receive(buffer);
if (r == 0)
{
break;
}
switch (buffer[0])
{
case 0:
string str = Encoding.UTF8.GetString(buffer, 1, r - 1);
ShowMsg(socketConnection.RemoteEndPoint.ToString() + ":" + str);
break;
case 1:
using (SaveFileDialog sfd = new SaveFileDialog())
{
sfd.ShowDialog(this);
string strFileName = sfd.FileName;
using (FileStream fsWrite = new FileStream(strFileName, FileMode.OpenOrCreate, FileAccess.Write))
{
fsWrite.Write(buffer, 1, r - 1);
}
MessageBox.Show("保存成功");
}
break;
case 2:
Tremble();
break;
}
}
}
void Tremble()
{
for (int i = 0; i < 500; i++)
{
this.Location = new Point(0, 0);
this.Location = new Point(20, 20);
}
}
private void Form1_Load(object sender, EventArgs e)
{
Control.CheckForIllegalCrossThreadCalls = false;
}
}
}
https:
https:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?