接下来我们尝试实现最简单的Socket客户端,为了确保只可能你的代码有问题,服务器要先用别人成熟的代码测试(这也是编程的一个技巧,先不要用自己写的客户端测试自己写的服务器,这样出了问题你也不知道谁有问题,也可能都有问题,而是一样一样来,拿不准的先用别人的),先开启这个Socket服务器

 

尝试连接到服务器,只要参照网上的做法,调用Socket的connect方法和disconnect方法即可(把指定的IP地址和端口按照要求转成IPEndPoint类型),可以发现SocketTest软件确实就不但的提示New Client和Client closed connection,这也是我们后面要学习的,做客户端的时候如果连接成功了要提示,做服务器如果有客户端连接成功了也要提示。

 

如果为了更加严谨可以在转换之前先判断是否是合格的IP地址和端口,IP地址网上可以找到很多检测的手段,每个XXX.XXX数值有限制就行了,端口我这里填写的1234,其实也可以填写更大或者更小,具体最大值最小值没有研究过,但是不要填一些已经默认被占用的端口,比如80端口默认是http协议,21是默认的ftp端口,打开它的软件的Port可以看到常规的对TCP端口的定义,这些端口不要占用

 

连接完了之后就是考虑给服务器发消息,发送数据也比较简单,注意不能直接发送字符串,而是要转成byte数组(读者可以去看相关的文字,为什么要转成byte数组,可能考虑不同的操作系统,软件对文本的处理方式不同,所以需要弄成通用的byte字节流),此外可以发现简单的Send方法是不支持中文的,他接受到的东西是乱码(这个问题我们以后再考虑)

 

发送完成之后就要考虑接受服务器的数据。接收数据比发送麻烦的多,我们这里演示了最简单的接收方法(s.Recieve),用户一旦点击了接收的按钮,则窗口都不能动了,这也是同步Socekt通信的最大的特点(就是收到完毕之后才会接下去干别的) 。

 

读者还是想象成宾馆的房间,如果客户端没有Recieve,服务器就是往里发数据了,发完了之后客户端才Recieve会怎么样?测试可以发现如果是服务器先往Socket扔东西,客户端接收就会立即执行,当然s.Recieve方法一旦执行完毕,也就不阻塞了,窗口立即能动

 

通过上面两步的测试,我们发现接收数据会导致程序卡死,那么如何解决Receive方法导致的整个程序卡死的问题呢?(事实上根本不应该用户点击了接收才执行接收,而是随时可以接收服务器发过来的数据,如同我们可以随时给服务器发消息一样),最简单的方法就是把会卡死的部分放到一个线程中去执行,下面我们只要连接成功,就会启动线程并陷入死循环,在线程中Recieve的阻塞不会导致主程序的卡死

 

但是采集到数据之后如何更新到主界面的东西呢?我们如果在线程中去更新主界面label,textbox都是会报错的,一旦服务器点击了发送按钮,我们想要更新程序的界面文本框,标签之类的会提示从不是创建控件的线程访问它

 

如果读者上网查,在程序初始化的时候加上这一条"关闭跨线程访问控件检测"是最简单粗暴的解决办法,但是实际上读者如果做实际项目,有很多个线程用这种方式去更新界面的控件,程序是不稳定的(你测试一个小时可能没问题,你连续运行三天就不一定了)。我们下一节会结合事件和委托的方法一并处理这个问题。

 

 

更多教学视频和资料下载,欢迎关注以下信息:

我的优酷空间:

http://i.youku.com/acetaohai123

 

我的在线论坛:

http://csrobot.gz01.bdysite.com/

 

问题交流:

QQ:910358960

邮箱:acetaohai123@163.com

 

 

 

 

 

C#应用视频教程1.2 Socket通信客户端实现的更多相关文章

  1. C#应用视频教程1.3 Socket通信客户端完善

    我们先把前面的代码封装成一个完整的类,因为跟网络相关的方法并不一定是建立socket的服务器和客户端,所以还是应该把两个分开,比如获取本机IP,修改本机IP,PING远程主机这些事情应该放在一个单独的 ...

  2. c++ 网络编程(一)TCP/UDP windows/linux 下入门级socket通信 客户端与服务端交互代码

    原文作者:aircraft 原文地址:https://www.cnblogs.com/DOMLX/p/9601511.html c++ 网络编程(一)TCP/UDP  入门级客户端与服务端交互代码 网 ...

  3. Socket通信客户端和服务端代码

    这两天研究了下Socket通信,简单实现的客户端和服务端代码 先上winfrom图片,客户端和服务端一样 服务端代码: using System; using System.Collections.G ...

  4. Socket通信客户端设计(Java)

    public class Client extends JFrame implements Runnable{ private JPanel jPanel= new JPanel(); private ...

  5. Socket通信-客户端

    WSADATA wsd; SOCKET sHost; SOCKADDR_IN servAddr; if (WSAStartup(MAKEWORD(2, 2), &wsd) != 0) retu ...

  6. php的socket通信

    socket通常叫做'套接字',用于描述IP地址和端口,是一个通信链的句柄.应用程序通过套接字向网络发出请求或者应答忘了请求.socket既不是程序,也不是协议,其只是操作系统提供的通信层的一组抽象A ...

  7. AgileEAS.NET SOA 中间件平台.Net Socket通信框架-简单例子-实现简单的服务端客户端消息应答

    一.AgileEAS.NET SOA中间件Socket/Tcp框架介绍 在文章AgileEAS.NET SOA 中间件平台Socket/Tcp通信框架介绍一文之中我们对AgileEAS.NET SOA ...

  8. JAVA基础知识之网络编程——-TCP/IP协议,socket通信,服务器客户端通信demo

    OSI模型分层 OSI模型是指国际标准化组织(ISO)提出的开放系统互连参考模型(Open System Interconnection Reference Model,OSI/RM),它将网络分为七 ...

  9. Socket 通信原理(Android客户端和服务器以TCP&&UDP方式互通)

    转载地址:http://blog.csdn.net/mad1989/article/details/9147661 ZERO.前言 有关通信原理内容是在网上或百科整理得到,代码部分为本人所写,如果不当 ...

随机推荐

  1. hdu 1690 Bus System (有点恶心)

    Problem Description Because of the huge population of China, public transportation is very important ...

  2. POJ2157 Check the difficulty of problems 概率DP

    http://poj.org/problem?id=2151   题意 :t个队伍m道题,i队写对j题的概率为pij.冠军是解题数超过n的解题数最多的队伍之一,求满足有冠军且其他队伍解题数都大于等于1 ...

  3. ARC 101 C - Candles

    题面在这里! 显然直接枚举左端点(右端点)就OK啦. #include<cstdio> #include<cstdlib> #include<algorithm> ...

  4. PHP -- 类和对象基础入门

         本文目录:    创建简单类和对象 继承 抽象类 接口 构造方法 析构函数     1. 创建简单类    创建一个People的类,在这里有四个要点说明一下: 第一个是在PHP中,访问属性 ...

  5. java验证openssl生成的ssl证书和私钥是否匹配

    最近有一个需求上传ssl证书和私钥,但是上传之前需要验证ssl证书和私钥是否正确,其中的业务逻辑涉及到以下几点: 一.读取ssl证书,读取ssl证书公钥       要实现该功能比较简单,java里面 ...

  6. [转]Android x86模拟器Intel Atom x86 System Image配置与使用方法

    Android x86模拟器Intel Atom x86 System Image配置与使用方法 前言: 大家现在开发使用的Android 模拟器模拟的是 ARM 的体系结构(arm-eabi),因此 ...

  7. 使用Keras开发神经网络

    一.使用pip安装好tensorflow 二.使用pip安装好Keras 三.构建过程: 1 导入数据 2 定义模型 3 编译模型 4 训练模型 5 测试模型 6 写出程序 1.导入数据 使用皮马人糖 ...

  8. Ext文本输入框:Ext.form.TextField属性汇总(转) (

    本章介绍Ext.form.TextField组件的基本用法: <form id="form1" runat="server">    <div ...

  9. Mastering stack and heap for system reliability

    http://www.iar.com/Global/Resources/Developers_Toolbox/Building_and_debugging/Mastering_stack_and_he ...

  10. Surface Mount Package Details

    http://www.centralsemi.com/product/packages/index2.php http://www.infineon.com/cms/cn/product/packag ...