C#TCPClient应用-一个简单的消息发送和接收
TcpSend窗口用于发送消息,另外写一个用于接收消息的应用程序,消息接受到以后,必须要关闭接收消息的窗口,才能在接收新的消息,不知道怎么能解决这个问题。
源代码:
发送消息的窗口代码
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Net; using System.Net.Sockets; using System.IO; namespace TCPSocket { public partial class FrmTcpSend : Form { public FrmTcpSend() { InitializeComponent(); } private void buttonSendFile_Click(object sender, EventArgs e) { // TcpClient tcpClient = new TcpClient(textBoxHostName.Text, Int32.Parse(textBoxPort.Text)); TcpClient tcpClient = new TcpClient(); tcpClient.Connect(IPAddress.Parse(textBoxHostName.Text), Int32.Parse(textBoxPort.Text)); NetworkStream ns = tcpClient.GetStream(); FileStream fs = File.Open("..\\..\\FrmTcpSend.cs", FileMode.Open); int data = fs.ReadByte(); while (data != -1) { ns.WriteByte((byte)data); data = fs.ReadByte(); } fs.Close(); ns.Close(); tcpClient.Close(); } private void buttonSendMessage_Click(object sender, EventArgs e) { TcpClient tcpClient = new TcpClient(); tcpClient.Connect(IPAddress.Parse(textBoxHostName.Text), Int32.Parse(textBoxPort.Text)); NetworkStream ns = tcpClient.GetStream(); if (ns.CanWrite) { Byte[] sendBytes = Encoding.UTF8.GetBytes(textBoxMessage.Text); ns.Write(sendBytes, 0, sendBytes.Length); } else { MessageBox.Show("不能写入数据流", "终止", MessageBoxButtons.OK, MessageBoxIcon.Stop); //Console.WriteLine("You cannot write data to this stream."); tcpClient.Close(); // Closing the tcpClient instance does not close the network stream. ns.Close(); return; } ns.Close(); tcpClient.Close(); } } }
接收消息的窗口代码
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Net; using System.Net.Sockets; using System.IO; using System.Threading; namespace TcpReceive { public partial class Form1 : Form { public Form1() { InitializeComponent(); //Thread thread = new Thread(new ThreadStart(Listen)); Thread thread = new Thread(new ThreadStart(SocketListen)); thread.Start(); IPAddress ipAddress = IPAddress.Any; //IPAddress.Parse("172.16.102.11"); this.Text = ipAddress.ToString()+"正在监听..."; } protected delegate void UpdateDisplayDelegate(string text); public void Listen() { IPAddress ipAddress = IPAddress.Any; //IPAddress.Parse("172.16.102.11"); TcpListener tcpListener = new TcpListener(ipAddress,9999); tcpListener.Start(); TcpClient tcpClient = tcpListener.AcceptTcpClient(); NetworkStream ns = tcpClient.GetStream(); StreamReader sr = new StreamReader(ns); string result = sr.ReadToEnd(); Invoke(new UpdateDisplayDelegate(UpdateDisplay), new object[] { result }); tcpClient.Close(); tcpListener.Stop(); } public void SocketListen() { Socket listener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); listener.Bind(new IPEndPoint(IPAddress.Any, 9999)); listener.Listen(0); Socket socket = listener.Accept(); Stream netStream = new NetworkStream(socket); StreamReader reader = new StreamReader(netStream); string result = reader.ReadToEnd(); Invoke(new UpdateDisplayDelegate(UpdateDisplay), new object[] { result }); socket.Close(); listener.Close(); } public void UpdateDisplay(string text) { richTextBox1.Text = text; } } }
转自:http://www.cnblogs.com/tiasys/archive/2009/11/24/1609286.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧