Socket编程基础
来源:互联网 发布:前瞻数据库账号 编辑:程序博客网 时间:2024/06/05 07:10
首先我们来弄明白一些概念,
第一个:什么是Socket?Socket简单的说就是套接字,它的作用就是在两个通信端点
之间建立一个‘通道’,通信双方的所有信息交流都通过这个‘通道’来完成。
其原型为:
SOCKET socket (int af, int type, int protocol );
参数意义:
af: address family 地址族,用于指出这个创建的socket所用的地址类型。
UNIX系统支持的地址族包括:
AF_UNIX 内部地址
AF_INET TCP/IP地址
AF_NX Xerox NS地址
AF_MPLINK ARPANET IMP(接口报文处理机)地址
AF_APPLETALK Apple公司的Appletalk地址。
DOS and Windows 系统下紧紧支持:
AF_INET TCP/IP地址
Type : 新套接字的类型描述符,Socket支持的套接字类型有:
SOCKET_STREAM 流式socket
SOCKET_DGRAM 数据报socket
SOCKET_RAW 原始socket
SOCKET_SEQPACKET 定序分组socket
SOCKET_RDM 可靠发送的消息
根据常见的情况,这里我们只对SOCKET_STREAM(流式套接字)和SOCKET_DGRAM(数据报套接字)加以详细的说明解释,其它几种类型的套接字
大家在使用时再个别查找吧。
1. 流式套接字
流式套接字提供双工、有序、可靠但无边界记录的数据流服务,它适合于大量的数据传输和对数据可靠性较高的情况下。流式套接字使用传输控制协议TCP。在使用流式套接字之前,我们必须在数据发送端和数据接受端建立连接,根据TCP协议的特点我们知道,它的传输可靠性是建立在数据校验及选择重传基础之上的,从而也就加大了系统的开销。
2. 数据报套接字
数据报套接字支持双向的数据流,但不保证传输的可靠性、有序性和无重复性。它记录数据的边界,数据报套接字适合于数据小或者数据发送双方同在一个局域网之内的情况。使用数据报套接字,不需要在数据发送之前建立连接,只需指定目的地址就可以了。所以编程较为简单、灵活。
Protocol : 使用的协议类型,有如下3种选择:
IPPROTO_TCP TCP协议
IPPROTO_UDP UDP协议
0 不指定,由系统自动指定。
返回值: 如果无错误发生,socket返回引用一个新的可用的套接字描述符。否则返回
SOCKET_ERROR错误,我们可以调用WSAGetLastError()获取相应的错误代码,至于具体有哪些错误代码,大家可以在MSDN的帮助文档中找到,这里不做说明。
+++++++++++++++++++++++++++++++++++++
当我们得到一个套接字描述符之后我们接着要做什么呢?大家都知道,我们在网上和别人通信是靠IP地址,因此我们还要把这个新创建的套接字与我们的地址绑定起来。我们使用bind()函数。原型如下:
int bind(
SOCKET
s
,
const struct sockaddr FAR*
name
,
int
namelen
);
参数意义:
S : 待绑定的套接字描述符(我们已经创建的)。
Name : 指向分配给套接字的地址指针
Namelen : name包含的地址的字节长度
返回值 : 如果成功返回0,失败返回SOCKET_ERROR.
补充说明 :
1.关于bind()函数:本函数适用于未连接的数据报或流类套接字,在connect或listen调用前使用。
2.关于struct sockaddr
结构体类型
struct sockaddr
是IP地址结构,其定义为:
struct sockaddr
{
u_short sa_family;
char sa_data[14];
};
此结构体在具体的编程中使用的不多,较常用的是结构体类型sockaddr_in
。
我们可以将sockaddr_in
类型方便的转换为
sockaddr
结构体类型。
Sockaddr_in结构体定义如下:
struct sockaddr_in
{
short sin_family;
u_short sin_port;
struct in_addr sin_addr;
char sin_zero[8];
};
其中sin_family字段必须为AF_INET。Sin_port为服务端口。
Sin_addr是一个4字节的IP地址,
最后的sin_zero用于填充,使得sockaddr_in和sockaddr结构长度相同。
+++++++++++++++++++++++++++++++++++++++++++++++
套接字已经创建而且已经绑定的本地地址,这时我们就可以在这个‘通道’(套接字)
上监听了,看看是否有连接过来。我们使用
listen()
函数在这个‘通道’上完成监听功能。
Listen()
函数原型如下:
int listen (
SOCKET
s
,
int
backlog
);
参数意义 :
S :
已经绑定但还未连接的套接字描述符
backlog :
等待连接的队列的最大长度
(>>>>>>待续<<<<<)
- Socket编程基础
- socket编程基础
- socket编程基础
- socket编程基础
- c#socket编程基础
- socket编程基础
- SOCKET 编程基础
- socket编程基础
- Socket网络编程基础
- java Socket编程基础
- socket网络编程基础
- c#socket 编程基础
- socket编程基础
- Socket编程基础范例
- Windows socket 编程 基础
- Socket编程基础
- socket编程基础
- Java基础---Socket编程
- 用VBS模拟二叉树,可以得到一个排序办法
- JavaScript使用技巧精萃
- C/C++编程新手错误语录(4)
- 买车测试
- 不错的图片验证码
- Socket编程基础
- English
- aa
- Visual C++ 中操纵 MS Word 转
- 在TableViewer中使用ITableColorProvider
- [转贴]CSDN上看到的搞笑东西
- 直接读取Excel文件数据
- [纪念]阳光家缘
- excel2000和VC