C#开发的TCP client通讯界面
来源:互联网 发布:人工智能ai开发语言 编辑:程序博客网 时间:2024/05/16 08:14
1.本文利用微软提供的TCPClient 控件以及NetworkStream 流操作的思想,花了一个周末的时间终于调试完成了TCP客户端发送和接收数据的基本通讯功能(基于ASCII码或者unicode码)。之前用c++写的时候花了一个多礼拜,本人是菜鸟水平,供各位参考!
2.由于时间有限,groupbox的重绘以及port端口自动获取等功能尚未实现。
3.TCP server部分将会在后期补上。
4.废话不多说直接上部分源码:
发送数据:
public void SendDatatoServer(string str_data) { if (isConnnectServer) { if (str_data != "") { try { Byte[] sendBytes = Encoding.ASCII.GetBytes(str_data); networkStream.Write(sendBytes, 0, sendBytes.Length); } catch { MsgWindow.Text = "SendDatatoServer Error!"; } } } }
public string ReceiveDatafromServer() { string returndata="未与服务器连接"; if (isConnnectServer) { byte[] bytes = new byte[tcpClient.ReceiveBufferSize]; try { int BytesRead = networkStream.Read(bytes, 0, (int)tcpClient.ReceiveBufferSize); returndata = Encoding.ASCII.GetString(bytes, 0, BytesRead); //if (returndata == "")// if (BytesRead==0) { receiveBlankCount++; returndata = "receiveBlankCount="+receiveBlankCount.ToString(); } if(receiveBlankCount>receiveBlankMaxNum) { receiveBlankCount = 0; isConnnectServer = false; returndata = str_disconnect; } //returndata = Encoding.Unicode.GetString(bytes, 0, BytesRead); } catch { returndata = "读取缓冲区失败,可能与服务器断开连接!"; isConnnectServer = false; } } return returndata; }
线程部分:(开通了线程接收数据舍弃了定时器的方式,界面不会出现卡顿的情况)
public delegate void UpdateTxt(string received_data); //创建一个委托,为访问textbox控件TCP_ReceiveWindow public UpdateTxt updateTxt; //定义一个委托变量 public void UpdateTxtMethod(string received_data)//更新控件TCP_ReceiveWindow的方法 { TCP_ReceiveWindow.AppendText(received_data + "\r\n"); TCP_ReceiveWindow.ScrollToCaret(); }
//此为在非创建线程中的调用方法,其实是使用TextBox的Invoke方法。 public void ThreadMethodTxt() { while (isConnnectServer) { this.BeginInvoke(updateTxt, ReceiveDatafromServer()); Thread.Sleep(100); } //this.MsgWindow.Text = "与服务器断开连接!"; }
private void Form1_Load(object sender, EventArgs e) { //实例化委托 updateTxt = new UpdateTxt(UpdateTxtMethod); }
private void button3_Click(object sender, EventArgs e) { if (!isConnnectServer) { ConnectServer(ServerIPInput.Text, ServerPortInput.Text); Thread objThread = new Thread(new ThreadStart(delegate { ThreadMethodTxt(); })); objThread.Start(); } else { MsgWindow.Text = "已连接服务器,请断开后重连!"; } //TCPClientReceiveThread.Start(); //timer1.Enabled = true; }
参考源码:http://download.csdn.net/detail/ericwuhk/9695976
参考网址(C# 获得本机IP、端口等信息地址以及服务器IP信息):
http://254698001.blog.51cto.com/2521548/768124/
最终界面如下:
调试工具助手:
http://download.csdn.net/download/ericwuhk/9634094
0 0
- C#开发的TCP client通讯界面
- 简单的c# TCP通讯
- C# TcpListener的TCP通讯
- C# Socket的TCP通讯
- C# Socket的TCP通讯
- C# Socket的TCP通讯
- c# socket的tcp通讯
- C# Socket的TCP通讯
- C# TCP sever & client
- c# TCP通讯
- 完成了C# client的部分开发
- c# TCP Socket通讯基础
- 简单的TCP-Client
- [收藏] 一个Smark Client的界面开发包
- TCP的通讯介绍
- Socket的TCP通讯
- java的TCP通讯
- UR的TCP通讯
- HashSet的实现原理
- 【Android 基础】APP更新方法浅析
- Fiddler修改服务器返回
- android TextView line shape
- fstab简介
- C#开发的TCP client通讯界面
- CIR,CBS,EBS,PIR,PBS傻傻分不清楚?看这里!----揭秘令牌桶
- 172. Factorial Trailing Zeroes
- poj算法题1028——Web Navigation
- C/C++语言宏定义使用详解
- python LDLE如何实现清屏
- 使用STM32实现PMSM电机的正弦驱动
- Perf -- Linux下的系统性能调优工具
- css行高line-height的一些深入理解及应用