Linux c Socket编程

来源:互联网 发布:淘宝买dota2饰品流程 编辑:程序博客网 时间:2024/05/02 00:46

一、socket基本操作:

1,socket();

2, bind();

3,linsten();

4,accept();

5,connect();

6,send()/sendto/write()....

7,recv()/recvfrom/read().....

close();

二、socket函数原型及参数

1,int socket(int domain, int type, int protocol);
第一个参数指定应用程序使用的通信协议的协议族,对于TCP/IP协议族,该参数置AF_INET;
第二个参数指定要创建的套接字类型,流套接字类型为SOCK_STREAM、数据报套接字类型为SOCK_DGRAM、原始套接字SOCK_RAW(WinSock接口并不适用某种特定的协议去封装它,而是由程序自行处理数据包以及协议首部);
两个重要的类型是 SOCK_STREAM 和 SOCK_DGRAM。 SOCK_STREAM表明数据象字符流 一样通过 socket 。而SOCK_DGRAM 则表明数据将是数据报(datagrams)的形式。
2,int bind(SOCKET socket, const struct sockaddr *address,
socklen_t address_len);
参数说明:
socket:是一个套接字。
address:是一个sockaddr结构指针,该结构中包含了要结合的地址和端口号。
address_len:确定address缓冲区的长度。
返回值:如果函数执行成功,返回值为0,否则为SOCKET_ERROR。
在定义一个套接字后,需要调用bind函数为其指定本机地址、协议和端口号。
3,int  listen( SOCKET s, int backlog);
S:用于标识一个已捆绑未连接套接口的描述字。
backlog:等待连接队列的最大长度
4,SOCKET accept( SOCKET s, struct sockaddr FAR* addr,int FAR* addrlen);
参数
s:套接口描述字,该套接口在listen()后监听连接。
addr:(可选)指针,指向一缓冲区,其中接收为通讯层所知的连接实体的地址。Addr参数的实际格式由套接口创建时所产生的地址族确定。
addrlen:(可选)指针,输入参数,配合addr一起使用,指向存有addr地址长度的整型数。
返回值
成功返回一个新的套接字描述符,失败返回-1
注:SOCKET 其实就是int类型,此处返回值可申请一个int fd;


5,int connect(int sockfd, struct sockaddr * serv_addr,int addrlen)

sockfd:socket返回的文件描述符.

serv_addr:储存了服务器端的连接信息.其中sin_add是服务端的地址

addrlen:serv_addr的长度

connect函数是客户端用来同服务端连接的.成功时返回0,sockfd是同服务端通讯的文件描述符 失败时返回-1
.

6,int send (int s,const void *msg,size_t len,int flags);
参数说明
第一个参数指定发送端套接字描述符;
第二个参数指明一个存放应用程式要发送数据的缓冲区;
第三个参数指明实际要发送的数据的字节数;
第四个参数一般置0。
返回值为:send  msg的字节数。
7,int  recv( SOCKET s, char FAR* buf, int len, int flags);
s:一个标识已连接套接口的描述字。
buf:用于接收数据的缓冲区。
len:缓冲区长度。
flags:指定调用方式。
返回值:recv 到的buf字节数。





0 0
原创粉丝点击