1、C#网络编程简单实现通信小例子1、主界面2、源程序Sendpublic partial class formUdpSend : Form /声明一个UdpClient对象 UdpClient udpClient; public formUdpSend() InitializeComponent(); /实例化UdpClient对象 udpClient = new UdpClient(); private void btnSend_Click(object sender, EventArgs e) /获取发送信息 string message = this.txtMessage.Text; /获
2、取发送数据 byte data = System.Text.Encoding.UTF8.GetBytes(message); udpClient.Connect(IPAddress.Parse(this.txtIP.Text),12345); udpClient.Send(data, data.Length); this.txtMessage.Text = ; Receive public partial class formUdpReceive : Form UdpClient udpClient; Thread thread; public formUdpReceive() Initial
3、izeComponent(); /不捕获对错误线程的调用 CheckForIllegalCrossThreadCalls = false; udpClient = new UdpClient(12345); /设置监听 public void Listen() IPEndPoint iep = null; while (true) string data = System.Text.Encoding.UTF8.GetString(udpClient.Receive(ref iep); this.lbReceive.Items.Add(data); private void btnReceive
4、_Click(object sender, EventArgs e) thread = new Thread(new ThreadStart(Listen); thread.IsBackground = true; thread.Start(); private void formUdpReceive_Load(object sender, EventArgs e) 1、主界面2、源代码 Clientpublic partial class FormClient : Form /声明一个Socket public Socket newClient; /判断是否连接成功 public bool
5、isConnected; /定义一个线程 public Thread myThread; /定义一个委托 public delegate void MyInvoke(string str); public FormClient() InitializeComponent(); private void Connection() /IPAddress ip=null; /int port=888; bytedata=new byte1024; /创建一个新的Socket newClient = new Socket(AddressFamily.InterNetwork, SocketType.S
6、tream, ProtocolType.Tcp); /获取IP地址 #region GetIP /if (txtIP.Text = string.Empty) / / MessageBox.Show(远程IP不能为空); / /else / / string pattrn = (?:(?:250-5|20-4d|(1d2)|(1-9?d).)3(?:250-5|20-4d|(1d2)|(1-9?d); / if (System.Text.RegularExpressions.Regex.IsMatch(txtIP.Text.Trim(), pattrn) / / ip = IPAddress.
7、Parse(txtIP.Text.Trim(); / / else / / MessageBox.Show(IP地址格式不正确!); / / #endregion /获取端口号 #region GetPort /if (System.Text.RegularExpressions.Regex.IsMatch(-?d+.?d*$, txtPort.Text.Trim() / / port = Convert.ToInt32(txtPort.Text.Trim(); / /else / / MessageBox.Show(端口号格式不正确); / #endregion /封装网络端点 IPEndP
8、oint ie = new IPEndPoint(IPAddress.Parse(txtIP.Text.Trim(),Convert.ToInt32(txtPort.Text.Trim(); #region Connection try /建立与远程主机之间的连接 newClient.Connect(ie); /设置连接服务器控件的属性 / btnConnection.Enabled = false; /设置连接状况 btnConnection.Text = 停止连接; /isConnected = true; catch (SocketException ex) MessageBox.Sho
9、w(连接服务器失败 + ex.Message); return; #endregion /启动当前线程用于接收消息 ThreadStart myThreadDelegate = new ThreadStart(ReceiveMessage); myThread = new Thread(myThreadDelegate); myThread.Start(); / / 接收消息 / public void ReceiveMessage() while (true) /定义字节数组大小 bytedata=new byte1024; /获取数组长度 int recv = newClient.Rece
10、ive(data); /接收数据 string strData = Encoding.UTF8.GetString(data, 0, recv); /显示信息 ShowMessage(newClient.RemoteEndPoint.ToString()+:+strData+rn); / / 显示消息 / / 接收的消息,可能来自Client/也可能来自Server public void ShowMessage(string msg) /如果是在创建该控件以外的线程调用该控件 if (lbMessage.InvokeRequired) MyInvoke myInvoke = new MyIn
11、voke(ShowMessage); /lbMessage.Invoke(myInvoke, new object msg ); lbMessage.Invoke(myInvoke,new object远程主机:+msg); else lbMessage.Items.Add(msg); private void btnSend_Click(object sender, EventArgs e) if (txtSendMessage.Text = null) txtSendMessage.Text = 发送消息不能为空; /停留1秒消失 else /获取发送数据长度 int myMessLeng
12、th = txtSendMessage.Text.Length; /将数据转换为字节数组 byte data = new bytemyMessLength; data = Encoding.UTF8.GetBytes(txtSendMessage.Text); /发送数据 int i = newClient.Send(data); /将数据显示在Client ShowMessage(我说: + txtSendMessage.Text + rn); private void btnConnection_Click(object sender, EventArgs e) if (btnConnec
13、tion.Text = 连接服务) Connection(); else newClient.Close(); private void FormClient_Load( object sender, EventArgs e ) Serverpublic partial class Form1 : Form public Form1() InitializeComponent(); public Thread myThread;/声明一个线程实例 public Socket newSocket;/声明一个Socket实例 public Socket serverSocket;/声明服务端Soc
14、ket实例 public Socket clientSocket;/声明客户端Socket public delegate void MyInvoke(string str);/声明一个委托 public IPEndPoint localEP;/声明本地网络端点 public EndPoint remote;/声明网络地址 public int localPort;/声明本地端口号 public Boolean isListening;/声明服务端是否监听 public Hashtable _sessionTable;/用于记录用户信息 public bool btnState=true; /
15、设置服务端监听的端口号属性 public int SetPort get return localPort; set localPort = value; /设置监听 public void Listening() SetPort = int.Parse(txtPort.Text.Trim();/设置端口号 newSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);/初始化Socket实例 newSocket.SetSocketOption(SocketOptionLevel.
16、Socket, SocketOptionName.ReuseAddress, true);/允许Socket被绑定在已使用的地址上 localEP = new IPEndPoint(IPAddress.Any, SetPort);/初始化网络端点信息 try _sessionTable = new Hashtable( 50 ); newSocket.Bind(localEP);/绑定端口 newSocket.Listen(10);/开始监听 newSocket.BeginAccept(new AsyncCallback(OnConnectRequest),newSocket);/开始异步接受
17、连接 catch(Exception ex) ShowMessage(ex.ToString(); private void btnStartServer_Click(object sender, EventArgs e) ThreadStart myThreadDelegate = new ThreadStart(Listening);/新建一个线程用于委托 myThread = new Thread(myThreadDelegate); if (btnState) myThread.Start(); stateBar.Text = 服务已经启动,等待客户端连接; btnState = fa
18、lse; btnStartServer.Text = 停止服务; else myThread.Interrupt(); myThread.Abort(); btnState = true; btnStartServer.Text = 开始服务; stateBar.Text = 服务已停止; /显示信息 public void ShowMessage(string msg) if (rtbMessage.InvokeRequired) MyInvoke myInvoke = new MyInvoke(ShowMessage); rtbMessage.Invoke(myInvoke, new ob
19、ject msg ); else rtbMessage.AppendText(msg); public void OnConnectRequest(IAsyncResult ar) serverSocket = (Socket)ar.AsyncState; clientSocket = serverSocket.EndAccept(ar);/异步接收连接 string welcomeStr = 欢迎登陆到服务器; byte data = System.Text.Encoding.UTF8.GetBytes(welcomeStr); remote = clientSocket.RemoteEnd
20、Point;/获取远程终点信息 ShowMessage(remote.ToString()+ 连接成功 +DateTime.Now.ToString()+rn); clientSocket.Send(data,data.Length,0); UserListOperate(clientSocket.RemoteEndPoint.ToString(); _sessionTable.Add(clientSocket.RemoteEndPoint,null);/将连接成功的客户端实例添加到哈希表中 serverSocket.BeginAccept(new AsyncCallback(OnConnec
21、tRequest), serverSocket);/等待新的客户端连接 /接收数据 ReceiveMessage(); /接收数据 public void ReceiveMessage () while (true) bytedata=new byte1024; int recv = clientSocket.Receive( data ); string message = Encoding.UTF8.GetString(data,0,recv); ShowMessage(clientSocket.RemoteEndPoint.ToString()+:+message+rn); /添加用户列
22、表 public void UserListOperate(string msg) /在线程里以安全的方式调用控件 if (lbUserList.InvokeRequired) MyInvoke myInvoke = new MyInvoke(UserListOperate); lblUserList.Invoke(myInvoke, new object msg ); else lbUserList.Items.Add(msg); /删除用户列表 public void UserListOperateRemove(string msg) if (lbUserList.InvokeRequir
23、ed) MyInvoke myInvoke = new MyInvoke(UserListOperateRemove); lbUserList.Invoke(myInvoke, new object msg ); else lbUserList.Items.Remove(msg); /发送广播 public void BroadCast() string strMessage = txtMessage.Text; Byte data = Encoding.UTF8.GetBytes(strMessage); foreach (DictionaryEntry item in _sessionTa
24、ble) EndPoint temp = (EndPoint)item.Key; clientSocket.SendTo(data, temp); ShowMessage(我:+strMessage+rn); txtMessage.Text = ; private void Form1_Load(object sender, EventArgs e) /获取本机IP IPAddress ip = Dns.GetHostByName( Dns.GetHostName() ).AddressList; lblIP.Text+=ip0.ToString(); private void Form1_FormClosing(object sender, FormClosingEventArgs e) /窗体关闭时判断线程是否为空 if (myThread != null) myThread.Abort(); throw new Exception(); private void btnSend_Click(object sender, EventArgs e) BroadCast(); 如有不当之处,烦请指教。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1