C# Socket 网络信息传输

目录

一、配置流程

(一)、客户端发送流程

(二)、客户端接收流程

(三)、服务端发送流程

(四)、服务端接收流程

二、代码配置

(一)、客户端发送

(二)、客户端接收

(三)、服务端发送

(四)、服务端接收

三、例程文件下载 


一、配置流程

(一)、客户端发送流程

                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 


如有错误,烦请批评指正

你可能感兴趣的:(C#基础点,c#,开发语言)