麻花痒 发表于 2025-4-14 02:26:24

C# TCP与ip通信

一、获取本机的ip地址

// 获取本地主机名
string hostName = Dns.GetHostName();
string ip = "127.0.0.1";
//Console.WriteLine("本地主机名: " + hostName);

// 获取本地IP地址
IPAddress[] addresses = Dns.GetHostAddresses(hostName);
Console.WriteLine("本地IPv4地址列表:");
foreach (IPAddress address in addresses)
{
    if (address.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork)
    {
      //Console.WriteLine(address.ToString());
      ip = address.ToString();
    }
}
textBox1.Text = ip;
二、服务器端


[*]定义
public Socket ServerSocket;// 套接字 用来监听
public Socket SocketAccept;// 套接字 绑定客户端
public Socket socket;// 套接字 用来通信

[*]开启监听(吸收信息)
private void button1_Click(object sender, EventArgs e)
{
    button1.Enabled = false;// 开启后把按钮禁用掉
                              // 设置通信协议   inter网、可以保证正常通信、通信类型
    ServerSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
    // 绑定ip地址
    IPAddress ip = IPAddress.Parse(textBox1.Text);
    // 创建端口号
    int port = 60000;
    // 创建端口连接点
    IPEndPoint ipEndPoint = new IPEndPoint(ip, port);
    // 做一个异常捕获 防止程序卡死
    try
    {
      // 调用
      ServerSocket.Bind(ipEndPoint);
      // 开启监听 .Listen
      ServerSocket.Listen(10);// 监听10个
                                  // 开启监听的线程
      Thread t1 = new Thread(ListTen);
      t1.IsBackground = true;// 设置后台线程
      t1.Start(ServerSocket);


    }
    catch (Exception ex) { }
}


// 定义调用方法
private void ListTen(object o)
{
    SocketAccept = o as Socket;
    // 做一个异常捕捉
    try
    {
      while (true)
      {
            // 线程堵塞 知道连接后执行代码
            socket = SocketAccept.Accept();
            // 获取用户的客户端ip地址
            string ip = socket.RemoteEndPoint.ToString();
            Addmsg(ip);
            // 会有多个ip连接使用线程用来接收信息
            Thread t2 = new Thread(Receive);
            t2.IsBackground = true;
            t2.Start(socket);
      }
    }
    catch (Exception ex) { }

}


private void Receive(object o)
{
    socket = o as Socket;
    while (true)
    {
      // 设置传输的信息大小 2MB
      byte[] buffer = new byte;
      // 判断客户端是否发送信息
      int r = socket.Receive(buffer);
      if (r == 0)
      {
            break;
      }
      // 转码
      String msg = Encoding.Default.GetString(buffer);
      // 显示
      Addmsg(msg);
    }
}

public void Addmsg(string msg)
{
    textBox3.BeginInvoke(new Action(() => {
      textBox3.Text += $"{msg}";
      textBox3.Text += "\r\n";
    }));
}


[*]发送信息
// 转码
bytep[] buffer = new byte;
// 把字符串转换为字节进行发送
buffer = Encoding.Default.GetBytes(“Hello word”);
// 发送信息
Socket.Send(buffer);

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: C# TCP与ip通信