多线程网络编程(一)C#

第一次写这样的学习笔记,希望给自己每一次的学习留一下一些东西,以便未来翻看,同时也给一些和我遇到一样问题的朋友提供一些方便。毕竟在编程的路上,并不是所有东西都能记得那么清楚,也不是马上就能记起在哪一本书。所以电子笔记就是最好的方式来收藏,搜索。


本文章我会分多篇来写,毕竟网络编程不是那么三言两语就能讲清楚的,我就通过自己的学习进度,及时的进行更新,当作对于自己学习成果的一个复习。

网络编程,对于很多人来说(至少对于我来说)逻辑上还是比较straightforward, 但有的时候总是会搞不明白几个socket之间的关系,因此就会搞糊涂,我就常常因为这样的事情,有些抵触网络编程,每次看代码都会觉得很累。看来一些网络上朋友的建议,在学习多线程之前,先明白基本的socket 服务器的搭建,接受,在去明白线程的道理,最后再去试着自己写写one server multiple clients application. 所以我就会按照这样的方法来学习。


首先,在C# socket 编程中,最大的一个优点就是把IP address 和 port 绑在了一起(pair)。这样可以让用户更直观的运用。他们分别为IPAddress  and IPEndPoint.

IPAddress class 里面有很多可直接调用的方法,但是最常用的是parse():

使用方法为: IPAddress newaddress = IPAddress.Parse("192.168.1.1")

然后IPEndPoint 就是用来表示这个pair:

 使用方法为:IPEndPoint iep = new IPEndPoint(newaddress, 9000); 

当然以上是最常用的方法,也有人直接就用 IPEndPoint("192.168.1.1", 9000) 来建立。


第二点需要知道的就是,在建立socket server的时候,里面的两个参数是相互匹配的。他们分别是sockleType and Protocoltype. 不能随便搭配。

使用方法为:Socket newsock = Socket(AddressFamilly,InterNetwork, SocketType.Stream, ProtocolType.Tcp)

也就是说,里面的stream 一定要pair tcp, 具体的几个组合是Dgram/ udp, stream/tcp, raw/icmp, raw/raw


第三步,一旦服务器建立了,服务器就需要一个绑定(bind)到当地的网络地址上。Bind(EndPoint Address).

使用方法为:  newsock.Bind(iep);

第四步,一旦武服务器绑定到这个当地网络,服务器就应该监听那些incoming 的连接。 Listen(int backlog)

使用方法为: newsock.Listen(20)

里面的20 这个参数,代表着最多可以接受多少连接。当时应该注意的这个数值的大小,因为每一次连接的尝试都会占用TCP buffer的空间,也就意味着更少的空间来进行发送和接受。


第五步,一定监听没有问题,服务器就准备开始接受任何一个incoming connects,而完成这个过程的就是accept()方法,accept() method will return a new socket descriptor, 这个新的socket就是用来所有通讯的连接。

使用方法为: Socket newClient = newserver.Accept();



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值