目录
一、配置流程
(一)、客户端发送流程
(二)、客户端接收流程
(三)、服务端发送流程
(四)、服务端接收流程
二、代码配置
(一)、客户端发送
(二)、客户端接收
(三)、服务端发送
(四)、服务端接收
三、例程文件下载
1、获取发送内容
2、解码到数组
3、socket.Send(XXX); 发送数据
1、实例化Socket -- Socket
2、配置IP和端口号 -- IPEndPoint
3、连接 -- Connect
4、启动异步接收
1、死循环接收
2、创建5M数组
3、获取接收长度 -- Receive
4、解码显示
1、获取IP地址
2、获取发送内容
3、解码发送
1、实例化 Socket -- Socket
2、设置IP类型和端口号 -- IPEndPoint
3、开始监听 -- Bind
4、设置最大监听数量 -- Listen
5、启动异步监听
1、处理正在连接的Socket -- Accept
2、启动异步接收
1、创建接收数组 -- byte[]
2、获取接收数据 -- Receive
3、解码显示
//获取发送内容
string str = SendTextBox.Text.Trim();
//解码到数组
byte[] buffer = Encoding.UTF8.GetBytes(str);
//发送
socketSend.Send(buffer);
//1、实例化Socket
socketSend = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
IPAddress ip = IPAddress.Parse(ipTextBox.Text);
//2、配置 IP地址和端口号
IPEndPoint point = new IPEndPoint(ip, Convert.ToInt32(portTextBox.Text));
//3、连接
socketSend.Connect(point);
ShowMsg("连接成功");
//4、开启多线程接收数据
Task.Run(Receive);
private void Receive()
{
//1、死循环接收
while (true)
{
//2、创建5M的数组
byte[] buffer = new byte[1024 * 1024 * 5];
//3、获取接收的字节数量
int r = socketSend.Receive(buffer);
if (r == 0) //若无数据退出
{
break;
}
if (buffer[0] == 0)
{
//窗口文件
//解码显示
string str = Encoding.UTF8.GetString(buffer, 1, r-1);
ShowMsg(socketSend.RemoteEndPoint + ":" + str);
}
else if (buffer[0] == 1)
{ //桌面文件
SaveFileDialog saveFileDialog = new SaveFileDialog();
saveFileDialog.Filter = "文本文件|*.txt|所有文件|*.*";
saveFileDialog.InitialDirectory = @"C:\Users\Rush\Desktop";
saveFileDialog.Title = "需要保存的文件";
saveFileDialog.ShowDialog(this);
string path = saveFileDialog.FileName;
using (FileStream fileWrite = new FileStream(path,FileMode.OpenOrCreate,FileAccess.Write) )
{
fileWrite.Write(buffer, 1, r - 1);
}
MessageBox.Show("保存成功");
}
}
}
//1、获取IP地址
string ip = ipComboBox.SelectedItem.ToString();
//2、获取发送内容
string str = SendTextBox.Text.Trim();
//3、解码到数组byte[]
List list = new List();
list.Add(0);
byte[] buffer = Encoding.UTF8.GetBytes(str);
list.AddRange(buffer);
byte[] newBuffer = list.ToArray();
//4、发送数据
ipDictionary[ip].Send(newBuffer);
//1、实例化 Socket
Socket socketWatch = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
//2、设置IP类型
IPAddress ip = IPAddress.Any;
//3、获取IP数据
IPEndPoint point = new IPEndPoint(ip, Convert.ToInt32(portTextBox.Text));
//4、开启监听
socketWatch.Bind(point);
ShowMsg("监听成功");
//5、设置最大监听数量
socketWatch.Listen(10);
//6、启动异步监听
Task.Run(()=>Listen(socketWatch));
void Listen(object o)
{
Socket socketWatch = o as Socket;
while (true)
{
try
{
//1、处理正在执行的Socket
socketSend = socketWatch.Accept();
string ip = socketSend.RemoteEndPoint.ToString();
ipDictionary.Add(ip,socketSend);
ipComboBox.Items.Add(ip);
ShowMsg(ip+ ":" + "连接成功");
//2、开启异步接收
Task.Run(()=>Recive(socketSend));
}
catch
{ }
}
}
void Recive(object o)
{
Socket socketSend = o as Socket;
while (true)
{
try
{
//1、创建接收数组
byte[] buffer = new byte[1024 * 1024 * 2];
//2、获取接收数据
int r = socketSend.Receive(buffer);
if (r == 0)
{
break;
}
//3、解码显示
string str = Encoding.UTF8.GetString(buffer, 0, r);
ShowMsg(socketSend.RemoteEndPoint + ":" + str);
}
catch { }
}
}
链接:https://pan.baidu.com/s/1ieb8jb_nBrrSoB7Zs3VDBw?pwd=1234
提取码:1234
如有错误,烦请批评指正