SOCKET类的设计和实现

原创 2004年08月25日 17:15:00
SOCKET类的设计和实现

WinSock基本知识

这里不打算系统地介绍socket或者WinSock的知识。首先介绍WinSock API函数,讲解阻塞/非阻塞的概念;然后介绍socket的使用。

WinSock API

Socket接口是网络编程(通常是TCP/IP协议,也可以是其他协议)的API。最早的Socket接口是Berkeley接口,在Unxi操作系统中实现。WinSock也是一个基于Socket模型的API,在Microsoft Windows操作系统类中使用。它在Berkeley接口函数的基础之上,还增加了基于消息驱动机制的Windows扩展函数。Winscok1.1只支持TCP/IP网络,WinSock2.0增加了对更多协议的支持。这里,讨论TCP/IP网络上的API。

Socket接口包括三类函数:

第一类是WinSock API包含的Berkeley socket函数。这类函数分两部分。第一部分是用于网络I/O的函数,如

accept、Closesocket、connect、recv、recvfrom、Select、Send、Sendto

另一部分是不涉及网络I/O、在本地端完成的函数,如

bind、getpeername、getsockname、getsocketopt、htonl、htons、inet_addr、inet_nton

ioctlsocket、listen、ntohl、ntohs、setsocketopt、shutdow、socket等

第二类是检索有关域名、通信服务和协议等Internet信息的数据库函数,如

gethostbyaddr、gethostbyname、gethostname、getprotolbyname

getprotolbynumber、getserverbyname、getservbyport。

第三类是Berkekley socket例程的Windows专用的扩展函数,如gethostbyname对应的WSAAsynGetHostByName(其他数据库函数除了gethostname都有异步版本),select对应的WSAAsynSelect,判断是否阻塞的函数WSAIsBlocking,得到上一次Windsock API错误信息的WSAGetLastError,等等。

从另外一个角度,这些函数又可以分为两类,一是阻塞函数,一是非阻塞函数。所谓阻塞函数,是指其完成指定的任务之前不允许程序调用另一个函数,在Windows下还会阻塞本线程消息的发送。所谓非阻塞函数,是指操作启动之后,如果可以立即得到结果就返回结果,否则返回表示结果需要等待的错误信息,不等待任务完成函数就返回。

首先,异步函数是非阻塞函数;

其次,获取远地信息的数据库函数是阻塞函数(因此,WinSock提供了其异步版本);

在Berkeley socket函数部分中

基于Socket的游戏服务器通信框架的设计与实现

博客地址:blog.liujunliang.com.cn开发工具:VS2017、Unity2017本文介绍使用Socket/TCP来开发客户端与服务器端通信框架博主使用过PhotonServer,由于...
  • qq_33747722
  • qq_33747722
  • 2017年11月13日 09:19
  • 222

C# 实现的一种Socket通讯框架

一、通讯框架类图 二、框架说明 上图是通讯框架静态类图,其抽象模型是:服务器在指定的IP和端口上进行监听,当收到一个连接请求时就会创建一个连接,然后把这个连接交给一个执行器执行处理该连接,一个...
  • msst1234
  • msst1234
  • 2017年07月04日 15:26
  • 1332

基于Socket编程实现一个简单的Web服务器

using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Ne...
  • CGS_______
  • CGS_______
  • 2017年06月24日 15:32
  • 469

使用 Socket 通信实现 FTP 客户端程序

这两天在研究FTP上传文件的事情,真的是让人很头疼,一直用的是C/C++,所以选用的是ftpputfile(),一直上传不上去,完整折腾了两天,网上的资料都找遍了,而且也不能使用ftpgetfile函...
  • lijia11080117
  • lijia11080117
  • 2017年02月23日 23:47
  • 1800

C++类的设计与实现规范

规范是一种规定,遵守这种规定能够带来长远的利益,而违反这种规定却不会立即收到惩罚。程序设计的规范是人们在长期的编程时间中总结出来的,深入理解中这些规范需要认真的思考和大量的实践 。不符合程序设计规范的...
  • K346K346
  • K346K346
  • 2015年10月27日 10:39
  • 1612

用socket编程实现的简单的聊天软件

用socket编程实现的简单的聊天软件 import javax.swing.*; import java.awt.event.*; import javax.swing.border...
  • l450741881
  • l450741881
  • 2016年02月27日 11:55
  • 951

基于Socket编程的网络聊天室

可行性分析(1)操作可行性聊天室是提供给网民一个交友与娱乐的场所。在聊天室里,网民可选择自己的聊天对象,与其进行对话交流,是网民之间相互沟通、交流情感的最佳方式之一。利用聊天室,用户可以通过网络在线与...
  • johnWcheung
  • johnWcheung
  • 2017年04月12日 23:33
  • 1348

ios socket 实现简单的聊天系统

socket socket又称套接字网络上的两个程序通过双向的通讯连接实现数据的交换, 这个连接的一端称为一个socket应用程序通过套接字向网络发出请求或者应答网络请求. 流程图 ...
  • zuojinmin
  • zuojinmin
  • 2016年05月13日 10:59
  • 2612

设计一个简单的socket通信协议

为什么要设计一个协议呢?因为TCP协议是面向字节流的协议,面向字节流的协议是无边界的,也就是说一次发送操作并不一定就仅仅产生一个数据包,而有可能是多个,在接收端不一定一次接收就能完成所有数据的收操作。...
  • oceanperfect
  • oceanperfect
  • 2016年04月05日 09:42
  • 2671

C++实现简单的socket通信

最近一直有人问我会不会c++的socket,其实我感觉c++只不过是类中多了一些方法,把c中面向过程的内容搬到c++的类方法中.大致并没有多大改变.干吗还要问你会不会了 --------------...
  • w451062810
  • w451062810
  • 2016年09月06日 00:30
  • 1851
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:SOCKET类的设计和实现
举报原因:
原因补充:

(最多只允许输入30个字)