ImageVerifierCode 换一换
格式:DOCX , 页数:17 ,大小:44.18KB ,
资源ID:10819562      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/10819562.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(C#网络编程简单实现通信小例子.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

C#网络编程简单实现通信小例子.docx

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