C# 局域网聊天 发送信息

        //发送大量文本消息
        private void sendMessage()
        {
            if (richTextBox_send.Text.Trim().Length==0 && richTextBox_send.Rtf.IndexOf("pict")<0)
            {
                MessageBox.Show("发送的消息不能为空");
                return;
            }
            
            if (Encoding.Default.GetByteCount(richTextBox_send.Text) > 1024*3)
                {
                    MessageBox.Show("发送的内容过长");
                    return;
                }
            try
            {
                //初始化接受套接字:寻址方案,以字符流方式和Tcp通信
                socketSent = new Socket(AddressFamily.InterNetwork,
                               SocketType.Stream,
                               ProtocolType.Tcp);

                //设置目标服务器IP地址和端口
                ipSent = new IPEndPoint(IPAddress.Parse(ip), 8001);

                //与目标服务器进行连接
                socketSent.Connect(ipSent);
                
                //将要发送的消息转化为字节流,然后发送
                

                socketSent.Send(Encoding.Default.GetBytes("MSG"));
                Thread.Sleep(100);
                //循环发送
                //设置缓冲区为1024byte
                byte[] buff = new byte[1024];
                int len = 0;
                MemoryStream data = new MemoryStream();
                richTextBox_accept.Rtf = richTextBox_accept.Rtf.Replace(@"\f1\par", "");
                richTextBox_send.SaveFile(data, RichTextBoxStreamType.RichText);
                data.Position = 0;
                while ((len = data.Read(buff, 0, 1024)) != 0)
                {
                    //按实际的字节总量发送信息
                    socketSent.Send(buff, 0, len, SocketFlags.None);
                    //richTextBox_accept.AppendText(Encoding.Default.GetString(buff));
                }
                data.Close();
                data.Dispose();
                socketSent.Send(Encoding.Default.GetBytes("END"));
                socketSent.Close();
            }
            catch
            {
                MessageBox.Show(user + "已经下线!");
                return;
            }
            if (richTextBox_accept.Text != "")
            {
                richTextBox_accept.SelectionColor = Color.Green;
                richTextBox_accept.AppendText("\n" + currentUser + " " + DateTime.Now.ToString("yyyy-mm-dd hh:mm:ss") + "\n");
                richTextBox_accept.SelectionColor = Color.Black;

                richTextBox_accept.Select(richTextBox_accept.Text.Length, 0);
                richTextBox_accept.SelectedRtf = richTextBox_send.Rtf;
                richTextBox_accept.Update();
                richTextBox_accept.Select(richTextBox_accept.Rtf.Length, 0);
            }
            else
            {
                richTextBox_accept.SelectionColor = Color.Green;
                richTextBox_accept.AppendText(currentUser + " " + DateTime.Now.ToString("yyyy-mm-dd hh:mm:ss") + "\n");
                richTextBox_accept.SelectionColor = Color.Black;

                richTextBox_accept.Select(richTextBox_accept.Text.Length, 0);
                richTextBox_accept.SelectedRtf = richTextBox_send.Rtf;
                richTextBox_accept.Update();
                richTextBox_accept.Select(richTextBox_accept.Rtf.Length, 0);

            }
            this.richTextBox_send.Clear();
            richTextBox_accept.ScrollToCaret();
        }

        private void btn_close_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        //组合键发送消息
        private void richTextBox_send_KeyUp(object sender, KeyEventArgs e)
        {
            if ((Control.ModifierKeys & Keys.Control) != 0 && e.KeyCode == Keys.Enter)
            {
                if (radioBtn_sendStyle2.Checked)//发送模式选择为Enter+Ctrl
                { sendMessage(); }
            }
            else if (e.KeyCode == Keys.Enter)
            {
                if (radioBtn_sendStyle1.Checked)//发送模式选择为Enter
                {
                    sendMessage();
                }
            }
        }

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
您可以使用 C# 的 Socket 编程实现局域网文件传输。具体步骤如下: 1. 创建一个服务器端和一个客户端,分别监听和连接指定的 IP 地址和端口号。 2. 服务器端接收客户端发送的文件,并将其保存到指定的路径下。 3. 客户端读取本地文件,并将其发送给服务器端。 以下是一个简单的示例代码: 服务器端: ```csharp using System; using System.IO; using System.Net; using System.Net.Sockets; class Server { static void Main(string[] args) { // 创建一个监听器 TcpListener listener = new TcpListener(IPAddress.Any, 12345); listener.Start(); Console.WriteLine("等待客户端连接..."); // 接受客户端连接 TcpClient client = listener.AcceptTcpClient(); Console.WriteLine("客户端已连接"); // 接收文件名和文件大小 NetworkStream stream = client.GetStream(); byte[] buffer = new byte[1024]; int bytesRead = stream.Read(buffer, 0, buffer.Length); string fileName = Encoding.UTF8.GetString(buffer, 0, bytesRead); bytesRead = stream.Read(buffer, 0, buffer.Length); long fileSize = BitConverter.ToInt64(buffer, 0); // 创建文件流并保存文件 using (FileStream fileStream = new FileStream(fileName, FileMode.Create)) { long totalBytesRead = 0; while (totalBytesRead < fileSize) { int bytesToRead = (int)Math.Min(buffer.Length, fileSize - totalBytesRead); bytesRead = stream.Read(buffer, 0, bytesToRead); fileStream.Write(buffer, 0, bytesRead); totalBytesRead += bytesRead; } } Console.WriteLine("文件已保存"); // 关闭连接 client.Close(); listener.Stop(); } } ``` 客户端: ```csharp using System; using System.IO; using System.Net; using System.Net.Sockets; class Client { static void Main(string[] args) { // 连接服务器 TcpClient client = new TcpClient(); client.Connect(IPAddress.Parse("192.168.1.100"), 12345); // 发送文件名和文件大小 NetworkStream stream = client.GetStream(); string fileName = "test.txt"; byte[] fileNameBytes = Encoding.UTF8.GetBytes(fileName); stream.Write(fileNameBytes, 0, fileNameBytes.Length); long fileSize = new FileInfo(fileName).Length; byte[] fileSizeBytes = BitConverter.GetBytes(fileSize); stream.Write(fileSizeBytes, 0, fileSizeBytes.Length); // 发送文件内容 using (FileStream fileStream = new FileStream(fileName, FileMode.Open)) { byte[] buffer = new byte[1024]; int bytesRead; while ((bytesRead = fileStream.Read(buffer, 0, buffer.Length)) > 0) { stream.Write(buffer, 0, bytesRead); } } Console.WriteLine("文件已发送"); // 关闭连接 client.Close(); } } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

smartsmile2012

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值