套接字相关函数

加载套接字库并进行版本协商
Int WSAStartup(WORD wVersionRequested,
//请求的版本号,低字节代表主版本,高字节代表副版本,一般我们用MAKEWORD(x,y)//宏来指定版本号,如:MAKEWORD(2,1)代表2.1的版本
LPWSADATA lpWSAData//一个WSADATA结构体指针,用于接收实际加载的套接字 库版本号
)

创建套接字
SOCKET socket(int af, //指定协议族,也即网际域,对于windows平台总是AF_INET 或 PF_INET
Int type,//指定要创建的套接字类型
Int protocol)//指定协议类型,我们一般设为0,让他根据我们前两个参数自动设置

绑定到本机地址和端口
int bind(SOCKET s, //已创建的套接字描叙符
const struct sockaddr FAR *name, //要绑定的本机地址信息
Int namelen)//第二个参数的长度
其中要注意第二个参数,由于第二个参数适用于所有网络协议,所以我们可以根据需要进行替换,如我们常常这样定义一个AF_INET 的地址信息:

SOCKADDR_IN SrvAddr;
SrvAddr.family=AF_INET;
SrvAddr.port=hotns(666); //其中666代表端口号
SrvAddr.sin_addr.S_un.S_addr=htonl(192.168.1.101);
//或SrvAddr.sin_addr.S_un.S_addr=INADDR_ANY;(指绑定到本机的任一快网卡上,并且////其本身就是网络字节序,故无需转换,我推荐这种写

法)

Inet_addr和inet_ntoa函数
Unsigned long Inet_addr(sconst char FAR * cp);
Inet_addr可以把一个点分十进制表示的IP(如:192.168.1.101)转换为unsinged long 类型的数据,且该返回值可以直接赋值给S_addr
Char FAR * inet_ntoa(struct in_addr in);
Inet_ntoa 从他函数的声明就知道他完成一个和inet_addr相反的转换 。

将指定的套接字设为见监听模式
Int listen(SOCKET s,int backlog);
第一个参数 s: 已经创建的套接字描述符
第二个参数 backlog 设置等待连接队伍的最大长度,注意:不是一个端口上可以同时连接的数目。

就收客服端发送的连接请求
SOCKET accept(
SOCKET s,
Struct sockaddr FAR * addr,// 返回请求连接方的IP和端口信息
Int FAR * addrlen);

通过一个已经建立连接的套接字发送数据
Int send(
SOCKET s,//注意:是以建立连接的套接字
Const char FAR * buf,//目的地IP和端口信息
Int len,
Int falgs)//该设置影响发送行为,我们一般设为0

接收数据函数
Int recv(
SOCKET s,
Char FAR *buf,//发送数据的缓存地址
Int len,//发送数据长度
Int flags)//该设置影响发送行为,我们一般设为0

和一个特定的套接字建立连接
Int connect(
SOCKET s,
Const struct sockaddr FAR * name,//目的地址信息
Int namelen)

接受一次数据并保存数据源地址信息
Int recvfrom(
SOCKET s,
Char FAR*buf,
Int len,
Int flags,
Struct sockaddr FAR* from//用于保存数据源地址信息
Int FAR* fromlen);
注意:最后一个参数是in,out类型,我们要在传参之前赋初始值
如:int len=Sizeof(SOCKADDR);

向以一个特定的目的方发送数据
Int sendto(
SOCKET s,
Const char FAR * buf,//要发送的数据
Int len,//数据长度
Int flags,
Connect struct sockaddr FAR * to,//目的地址信息
Int tolen)

前面我们说了在socket通信中都采用网络字节序(高位先存),那么在实际的编程过程中必然少不了转换函数,这里介绍两个,htons和htonl
U_short htons(u_short hostshort);
U_long htonl(u_long hostlong);
功能:把一个无符号短型/长性主机字节序的数据转换为网络字节序

时间: 2024-08-13 09:10:17

套接字相关函数的相关文章

windows套接字相关函数

windows套接字相关函数 作者:vpoet mail:[email protected] 我们学习TCP/IP协议无非是利用这些协议进行通信开发,然而如果让我们自己来直接根据协议规则和协议格式来 进行网络开发无疑是一件十分痛苦的事情,显然为了减轻程序员的开发负担,windows提供给我们一套网络开发 的API,这个API族就叫做套接字库. 但是套接字和TCP/IP协议到底是什么关系呢. 我们暂且可以这样理解,如图: 那么OK,理解不了我们也暂且这样理解吧. 接下来我们讲讲使用套接字编程主要用

基于Windows的套接字相关函数及示例

链接ws2_32.lib库 头文件#include <winsock2.h> Winsock初始化 1 int WSAStartup(WORD wVersionRequested,LPWSADATA lpWSAData); wVersionRequested:Winsock版本信息,用MAKEWORD宏构造,MAKEWORD(2,2). lpWSAData:WSADATA结构体变量的地址. 1 #include <WinSock2.h> 2 #include <iostrea

套接字编程(VC_Win32)

简介(源于维基) Berkeley套接字(也作BSD套接字应用程序接口)刚开始是4.2BSD Unix操作系统(于1983发布)的一套应用程序接口.然而,由于AT&T的专利保护着UNIX,所以只有在1989年Berkeley大学才能自由地发布自己的操作系统和网络库.Berkeley套接字接口,一个应用程序接口(API),使用一个Internet套接字的概念,使主机间或者一台计算机上的进程间可以通讯. 它可以在很多不同的输入/输出设备和驱动之上运行,尽管这有赖于操作系统的具体实现. 接口实现用于T

理解网络编程和套接字

编写“Hello world!”服务器端 服务器端(server)是能够受理连接请求的程序.下面构建服务器端以验证之前提到的函数调用过程,该服务器端收到连接请求后向请求者返回“Hello world!”答复.除各种函数的调用顺序外,我们还未涉及任何实际编程.因此,阅读代码时请重点关注套接字相关函数的调用过程,不必理解全部示例. hello_server.c 1.  #include <stdio.h> 2.  #include <stdlib.h> 3.  #include <

套接字编程相关函数(2:TCP套接字编程相关函数)

1. 基本TCP客户/服务器程序的套接字函数 2. socket函数 为了执行网络I/O,一个进程必须做的第一件事就是调用socket函数,指定期望的通信协议类型.其定义如下: #include <sys/socket.h> int socket(int family, int type, int protocol); // 返回:若成功则返回非负描述符,若失败则返回-1 其中:family参数指明协议族,它是图4-2中所示的某个常值.该参数也往往被称为协议域. type指明套接字类型,它是图

TCP下的套接字编程

1.什么是套接字 应用层通过传输层进行数据通信时,TCP和UDP会遇到同时为多个应用程序进程提供并发服务的问题.多个TCP连接或多个应用程序进程可能需要通过同一个TCP协议端口传输数据.为了区别不同的应用程序进程和连接,许多计算机操作系统为应用程序与TCP/IP协议交互提供了称为套接字(Socket)的接口.区分不同应用程序进程间的网络通信和连接,主要有3个参数:通信的目的IP地址.使用的传输层协议(TCP或UDP)和使用的端口号.Socket原意是"插座".通过将这3个参数结合起来,

什么是套接字?

简介 套接字,是支持TCP/IP的网络通信的基本操作单元,可以看做是不同主机之间的进程进行双向通信的端点,简单的说就是通信的两方的一种约定,用套接字中的相关函数来完成通信过程. 非常非常简单的举例说明下:Socket=Ip address+ TCP/UDP + port. 主要参数 区分不同应用程序进程间的网络通信和连接,主要有3个参数:通信的目的IP地址.使用的传输层协议(TCP或UDP)和使用的端口号.Socket原意是 “插座”.通过将这3个参数结合起来,与一个“插座”Socket绑定,应

套接字编程——基于TCP协议

基础知识 (1)socket a. 什么是socket? socket这个词可以表示很多概念,这儿我们讲的socket是:"IP地址+端口号(TCP或UDP端口号)".在TCP/IP协议中,它唯一标识网络通讯中的一个进程. b. socket有什么用? 在TCP协议中,建立连接的两个进程各自有一个socket来标识,这两个socket组成 的socket pair就唯一标识一个连接.socket本身有"插座"的意思,因此用来描述网络连接的一 对一关系. c.什么叫s

Linux 网络编程——套接字的介绍

套接字是一种通信机制(通信的两方的一种约定),凭借这种机制,不同主机之间的进程可以进行通信.我们可以用套接字中的相关函数来完成通信过程. 套接字的特性有三个属性确定,它们是:域(domain),类型(type),和协议(protocol). 套接字的域 域指定套接字通信中使用的网络介质.最常见的套接字域是 AF_INET,它是指 Internet 网络,许多 Linux 局域网使用的都是该网络,当然,因特网自身用的也是它. 套接字类型 流套接字(SOCK_STREAM): 流套接字用于提供面向连