Socket网络编程学习笔记(2):面向连接的Socket

在上一篇中,我列了一些常用的方法,可以说这些方法是一些辅助性的方法 ,对于分析网络中的主机属性非常有用。在这篇中,我将会介绍一下面向连接( TCP)socket编程,其中辅以实例,代码可供下载。

对于TCP的Socket编 程,主要分二部分:

一、服务端Socket侦听:

服务端Socket侦听 主要分以下几个步骤,按照以下几个步骤我们可以很方便的建立起一个Socket侦 听服务,来侦听尝试连接到该服务器的客户Socket,从而建立起连接进行相关通 讯。

1、创建IPEndPoint实例,用于Socket侦听时绑定

1IPEndPoint ipep = new IPEndPoint(IPAddress.Any, 6001);

2、创建套接字实例

1//创建一个套接字
2      serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); 
   这里创建的时候用 ProtocolType.Tcp,表示建立一个面向连接(TCP)的Socket。

3、将所创 建的套接字与IPEndPoint绑定

1 //将所创建的套接字与 IPEndPoint绑定
2      serverSocket.Bind(ipep);
    4、设置套接字为收听模式

1//设置套接字为收听模式
2       serverSocket.Listen(10);

以上这四步,我们已经建立了 Socket的侦听模式,下面我们就来设置怎么样来获取客户Socket连接的实例,以 及连接后的信息发送。

5、在套接字上接收接入的连接

   1while (true)
2      {
3        try
4         {
5          //在套接字上接收接入的连接
6          clientSocket = serverSocket.Accept();
7          clientThread = new Thread(new ThreadStart (ReceiveData));
8          clientThread.Start();
9         }
10        catch (Exception ex)
11         {
12          MessageBox.Show ("listening Error: " + ex.Message);
13         }
14      }

通过serverSocket.Accept()来接收 客户Socket的连接请求,在这里用循环可以实现该线程实时侦听,而不是只侦听 一次。当程序运行serverSocket.Accept()时,会等待,直到有客户端Socket发 起连接请求时,获取该客户Socket,如上面的clientSocket。在这里我用多线程 来实现与多个客户端Socket的连接和通信,一旦接收到一个连接后,就新建一个 线程,执行ReceiveData功能来实现信息的发送和接收。

时间: 2024-09-10 02:49:55

Socket网络编程学习笔记(2):面向连接的Socket的相关文章

Socket网络编程学习笔记(3):利用套接字助手类

在上一篇中已经介绍了利用Socket建立服务端和客户端进行通信,如果需要 的朋友可访问<Socket网络编程学习笔记(2):面向连接的Socket>.在本篇 中,将利用C#套接字的助手类来简化Socket编程,使得刚刚接触到网络编程的 朋友们更容易上手. 跟上篇一样,通过C#套接字的助手类来编程同样分 服务端和客户端. 一.服务端侦听模式 1.创建套接字与 IPEndPoint绑定,并设置为侦听模式. 1//创建IPEndPoint实例 2 IPEndPoint ipep = new IPEn

Socket网络编程学习笔记(1):常用方法介绍

虽然天天上博客园欣赏各位"大侠"的杰作,偶然回首,突然发 现自己已成"潜水者"久矣.本来对于自己有限的水平,有点不好意 思在此发贴,不过潜伏久了,才慢慢意识到老是通过浏览他人的文章虽然能够提 高自己能力,能够及时的获取新技术新思想,但却只能停留在他人的思想上.通 过学习,加上自己的想法,再写出来,让大家来指证错误,不仅能够巩固自己的 知识,也可以让一些跟我一样迷惘的朋友们不用再去走一些弯路,岂不是两全其 美,本着这样的想法,打算把自己平时的所学所想都写下来,欢迎各路

Socket网络编程学习笔记(5):发送和接收实体类数据

在前面讲述的篇幅中,发送的都是文本信息,我们只要通过Encoding中的几 个方法把文本转化成二进制数组就可以利用Socket来传输了,这对于一些基本的 信息传输能够得到满足,但对于一些复杂的消息交流,则有些"吃力 ".我们有时候会把一些信息封闭在一个类中,如果Socket能够传送类对 象,那么一些复杂的问题能够通过面向对象来解决了,即方便又安全.大家都知 道,要想在网络上传输信息,必须要经过序列化才行,所以在传送类对象时,首 选必须对该类对象进行序列化,才能够在网络上进行传输. 序列

Socket网络编程学习笔记(4):TCP消息边界处理

在前面的几篇中,讲了关于套接字Socket以及利用套接字助手类来进行服务 端和客户端之间的通信,在此中间并没有对发送的信息进行任何的处理.在本篇 中将会讲一下TCP通信时的信息边界问题. 通过套接字或其助手类来接收信息时,是从缓存区里一次性把全部的缘存都 读取出来,只要你设置的缓存够大,它就能读取这么多,这样就会导致这样的情 况出现.如果服务端连续发送信息到客户端,如我连续发送字符串 "message 1"."message 2"."message 3&q

Socket网络编程学习笔记(6):使用线程池提高性能(完)

在前几篇介绍中,不论是服务端的侦听还是客户端的连接都是通过新建一个 线程去执行特定功能的.在这种情况下,一量有一个新客户端需要连接,则又得 创建新的线程,而当程序创建新线程时,往往需要大量的内部开销,这对程序的 性能有一定的影响.在.NET库中提供了一种方法,可以避免一些开销.而在 Socket通讯中还有另一种访求那就是异步Socket,我不知道用这种方式的性能如 何,在这里且不管这种形式,主要来看一下用线程池解决问题. Windows操作系允许用户维持一池"预先建立的"线程,这个线程

python网络编程学习笔记(二):socket建立网络客户端_python

1.建立socket 建立socket对象需要搞清通信类型和协议家族.通信类型指明了用什么协议来传输数据.协议的例子包括IPv4.IPv6.IPX\SPX.AFP.对于internet通信,通信类型基本上都是AF_INET(和IPv4对应).协议家族一般表示TCP通信的SOCK_STREAM或者表示UDP通信的SOCK_DGRAM.因此对于TCP通信,建立一个socket连接的语句为:s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)对于UDP通

python网络编程学习笔记(三):socket网络服务器_python

1.TCP连接的建立方法 客户端在建立一个TCP连接时一般需要两步,而服务器的这个过程需要四步,具体见下面的比较. 步骤 TCP客户端 TCP服务器 第一步 建立socket对象  建立socket对象 第二步 调用connect()建立一个和服务器的连接 设置socket选项(可选) 第三步 无 绑定到一个端口(也可以是一个指定的网卡) 第四步 无 侦听连接 下面具体来讲这四步的建立方法: 第一步,建立socket对象:这里与客户端一样,依然是: s=socket.socket(socket.

python网络编程学习笔记(一)_python

学习用书:<python 网络编程基础>作者John Goerzen 第一部分底层网络学习         Python提供了访问底层操作系统Socket接口的全部方法,需要的时候这些接口可以提供灵活而强有力的功能. (1)基本客户端操作         在<python 网络编程基础>一书中,作者列出了一个简单的Python客户端程序,具体如下: 复制代码 代码如下: import socket,sysport =70host=sys.argv[1] filename=sys.a

python网络编程学习笔记(五):socket的一些补充_python

1.半开放socket 利用shutdown()函数使socket双向数据传输变为单向数据传输.shutdown()需要一个单独的参数,该参数表示了如何关闭socket.具体为:0表示禁止将来读:1 表示禁止将来写:2表示禁止将来读和写. 2.timeouts控制超时 调用socket的settimeout()函数,向其传递参数,表明超时时间设置.当访问一个socket,如果经过了参数设定的时间后,什么都没有发生,则会产生一个socket.timeout异常.例如:当程序运行后,会等待数据传入.