作者godman362 (青)
看板NUU_CSIE
标题[笔记] C# Socket (2)
时间Sat May 30 15:31:02 2009
接着之前提到的Socket部份
Socket物件的连结准备方式大概如上面所写
那接下来讲一下Socket物件的
读写
通常
读这个动作,是写在Server端,也就是用於
接收
而
写,则是在Client端,用於
传送资料
先假设现在在处理Server端
那麽Server一般来说启动之後,假设你没有要回传资料给Client的话
就是造成一个infinite loop一直做接收的动作
那大概的形式会变成这样:
Socket Server =
new Socket(Internal, Stream, TCP);
Server.Bind(LocalHost);
Server.Listen(10);
Socket Client = Server.Accept();
while (true)
{
Byte[] Client_Data =
new Byte[256];
//Allocate Memory
Client.Recevice(Client_Data);
//Recevice Client Data
memset(Client_Data, 0, sizeof(Client_Data);
//Clear Memory
}
以上,会看到一个比较特殊的地方
Socket Client = Server.Accept();
为什麽要
另外弄一个物件出来给Server.Accept()?
你可以稍微注意看一下Accept的回传值:
Socket型态
用简单一点的角度来说
Accept是回传一个来自远端的
File Description
所谓File Description,以最基础的观点来看,他是一个被开启的资料
流
重点在於那个「流」字,我没有框错。Stream,就是用来传输资料的用途
因此,Accept接收到一个可以传输资料的Stream,当然要开一个Socket去接收
另外Recevice有很多的
Overload,不知道Overload的
请自己去读物件导向
当然,既然这个Stream已经建立起来
Server端自然也可以透过接收到的Stream送资料给Client端
如:
Client_Data = "SeptemHill Hello. ";
Client.Send(Client_Data);
但是很不幸的是,Client端并没有接收的功能
因为
Client端没有做Bind、
Listen、
Accept之类的工作
他
唯一做的,只有
Connect
所以这也是我个人在C#中写网路程式时,不会去用的方法
但是这似乎是在Winsock中,唯一的一种Socket处理方式
既然我不用这种方式,那麽C#中必然有好的处理方式是我个人所爱好的
就是上篇所讲得
TcpClient以及
TcpListener
以上,这篇先讲完Socket
晚上,或是有空(可能明天了吧)再继续
下次见。
--
要
感谢的人太多了,那就
谢天吧
要
改得程式码太多了,那就
改天吧
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 122.118.46.81
1F:推 sct830:解释得真好!! 05/30 18:07
2F:→ kage0213:个人意见,学生时期有机会用socket我觉得比较好 05/31 00:04
3F:→ kage0213:使用物件只是加速开发过程,本质上还是socket... 05/31 00:06
4F:→ kage0213:不过如果一直用c#倒是另当别论.... 05/31 00:08
5F:→ godman362:我了解k大的意思,因为在没有C#的状况下 05/31 07:07
6F:→ godman362:一切都只能用Socket处理,没有其他办法 05/31 07:07
7F:→ godman362:但是想说是在C#上面,所以我就没打算强调Socket 05/31 07:08
8F:→ osanaosana:推... 05/31 14:48