C#网络编程简单实现通信小例子_第1页
C#网络编程简单实现通信小例子_第2页
C#网络编程简单实现通信小例子_第3页
C#网络编程简单实现通信小例子_第4页
C#网络编程简单实现通信小例子_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、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.Tex

2、t; /获取发送数据 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() In

3、itializeComponent(); /不捕获对错误线程的调用 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 btnRe

4、ceive_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 newC

5、lient; /判断是否连接成功 public bool 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(AddressFami

6、ly.InterNetwork, SocketType.Stream, 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()

7、, pattrn) / / ip = IPAddress.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(端口号格式不正确)

8、; / #endregion /封装网络端点 IPEndPoint 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 (Socke

9、tException ex) MessageBox.Show(连接服务器失败 + ex.Message); return; #endregion /启动当前线程用于接收消息 ThreadStart myThreadDelegate = new ThreadStart(ReceiveMessage); myThread = new Thread(myThreadDelegate); myThread.Start(); / / 接收消息 / public void ReceiveMessage() while (true) /定义字节数组大小 bytedata=new byte1024; /获取数

10、组长度 int recv = newClient.Receive(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)

11、 MyInvoke myInvoke = new MyInvoke(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秒消失

12、else /获取发送数据长度 int myMessLength = 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 sende

13、r, EventArgs e) if (btnConnection.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

14、Socket serverSocket;/声明服务端Socket实例 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;/用于记录用户信息

15、 public bool btnState=true; /设置服务端监听的端口号属性 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.SetSo

16、cketOption(SocketOptionLevel.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(OnConne

17、ctRequest),newSocket);/开始异步接受连接 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 =

18、服务已经启动,等待客户端连接; btnState = false; 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); rtbMe

19、ssage.Invoke(myInvoke, new object 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); re

20、mote = clientSocket.RemoteEndPoint;/获取远程终点信息 ShowMessage(remote.ToString()+ 连接成功 +DateTime.Now.ToString()+rn); clientSocket.Send(data,data.Length,0); UserListOperate(clientSocket.RemoteEndPoint.ToString(); _sessionTable.Add(clientSocket.RemoteEndPoint,null);/将连接成功的客户端实例添加到哈希表中 serverSocket.BeginAcce

21、pt(new AsyncCallback(OnConnectRequest), 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.ToS

22、tring()+:+message+rn); /添加用户列表 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.InvokeRequired) MyInvoke myInvoke = new MyInvoke(UserListOperateRemove); lbUs

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论