网上的TCP/IP创建服务端和客户端的方法鱼龙混杂,自己把在使用项目中的TCP服务端和客户端的代码抽了出来,做了demo,以供大家使用参考。
为了方便调用,我把一些基础方法都整合封装到了Reader.dll中,直接调用方法即可,非常方便(伸手党直接下源码运行即可)
源码下载地址:https://download.csdn.net/download/horseroll/10444188
源码中包含dll文件,直接下载源码即可
dll文件下载地址:https://download.csdn.net/download/horseroll/10444167
源码程序运行使用方法:先打开服务端,再打开客户端,然后即可互相发送信息
效果图:
1.客户端编写
客户端连接方法使用readerCamera.ConnectServer方法,监听事件为ReceiveDataCamera,发送信息为readerCamera.ServerSendMessage方法
public partial class Client : Form { private Reader.ReaderMethod readerCamera;//摄像头采集类 public Client() { InitializeComponent(); //初始化访问实例 readerCamera = new Reader.ReaderMethod(); //回调函数 readerCamera.ReceiveCallback = ReceiveDataCamera; } private void btnopenclient_Click(object sender, EventArgs e) { string strLog = string.Empty; string strException = string.Empty; IPAddress ipAddress = IPAddress.Parse("127.0.0.1");//监听的ip地址 int nPort = 55;//监听的端口号 int nRet = readerCamera.ConnectServer(ipAddress, nPort, out strException); if (nRet != 0)//如果连接摄像头失败 { strLog = "连接摄像头失败,请确认是否已打开服务端,失败原因: " + strException; } else { strLog = "成功连接摄像头"+ipAddress+":"+nPort; } WriteLog(richTextBox1, strLog); } /// <summary> /// 客户端接收数据 /// </summary> /// <param name="btAryReceiveData"></param> private void ReceiveDataCamera(byte[] btAryReceiveData) { string str = System.Text.Encoding.Default.GetString(btAryReceiveData);//数据接收转string //richTextBox1.AppendText("接收到数据:" + str);直接调用该方法会出现跨线程调用问题 WriteLog(richTextBox1, "接收到数据:" + str); } private void btnclientsend_Click(object sender, EventArgs e)//发送数据 { readerCamera.ServerSendMessage(System.Text.Encoding.Default.GetBytes(tbclient.Text));//发送数据 } }
2.服务端编写
服务端连接方法使用readerCameraOpenServer方法,监听事件为ReceiveDataCamera,发送信息为readerCamera.ServerSendMessage方法
public partial class Server : Form { private Reader.ReaderMethod readerCamera;//摄像头采集 public Server() { InitializeComponent(); Client client = new Client(); client.Show(); //初始化访问读写器实例 readerCamera = new Reader.ReaderMethod(); //回调函数 readerCamera.ReceiveCallback = ReceiveDataCamera; } private void btnopenserver_Click(object sender, EventArgs e) { readerCamera.OpenServer(55);//打开服务端,监听端口55 WriteLog(richTextBox1,"打开端口55成功");//点击事件中调用该写入方法不会报错 } /// <summary> /// 服务器接收数据 /// </summary> /// <param name="btAryReceiveData"></param> private void ReceiveDataCamera(byte[] btAryReceiveData) { string str = System.Text.Encoding.Default.GetString(btAryReceiveData);//数据接收转string //richTextBox1.AppendText("接收到数据:" + str);直接调用该方法会出现跨线程调用问题 WriteLog(richTextBox1,"接收到数据:" + str); } /// <summary> /// 发消息 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnserversend_Click(object sender, EventArgs e) { readerCamera.ServerSendMessage(System.Text.Encoding.Default.GetBytes(tbserver.Text));//发送数据 } }