网络编程一些知识 网络编程知识

1、socket 函数—创建套接字、 “sys/socket.h”

int socket(int family,int type,intprotocol)

socket()打开一个网络通讯端口,如果成功,就返回一个文件描述符应用程序可以像读写文件一样用read/write在网络上收发数据;如果不成功,就返回-1

(1)对于IPv4,family参数指定为AF_INET

(2)对于TCP协议,type参数指定SOCK_STREAM,表示面向流的传输协议如果是UDP协议,则type参数指定为SOCK_DGRAM,表示面向数据报的传输协议,SOCK_RAW原始套接字

(3)protocol指定为0即可;

bind函数—绑定本机地址和端口“sys/types.h”“sys/socket.h”“arpa/inet.h”“netinet/in.h”

int bind(int sockfd,conststruct sockaddr *my_addr,socklen_t addrlen)

(1)sockfd: socket调用返回的文件描述符

(2)描述本机的端口和IP地址

my_addr是指向 sockaddr 结构的指针,包含本机IP 地址和端口号

(3)addrlen: sockaddr地址结构的长度

服务器需要调用bind绑定一个固定的网络地址和端口号.bind()成功返回0,失败返回-1

bind()的作用是将参数sockfd和my_addr绑定在一起,使sockfd这个用于网络通讯的文件描述符监听my_addr所描述的地址和端口号

connect函数—建立连接 返回值0或-1“sys/types.h”、“sys/socket.h”

intconnect(intsockfd,structsockaddr*serv_addr,intaddrlen)

(1)sockfd : socket返回的文件描述符

(2)serv_addr : 服务器端的地址信息

(3)addrlen : serv_addr的长度

listen函数—监听连接的套接字返回值0或-1

int listen(int sockfd,intbacklog)

(1)sockfd:监听连接的套接字

(2)backlog:最多能处理的连接请求

accept函数—接受TCP连接返回值已经建立好连接的套接字或-1“sys/types.h”、“sys/socket.h”

intaccept(intsockfd,structsockaddr*addr,socklen_t*addrlen)

(1)sockfd : 监听套接字

(2)addr : 对方地址,如果不关心可以设置为NULL

(3)addrlen:地址长度 地址

recv函数—数据接收返回值为实际接收的字节数或 -1 “sys/socket.h”

ssize_trecv(int socket,const void*buffer, size_t length, intflags)

(1)buffer : 发送缓冲区首地址(2)length : 发送的字节数(3)flags : 接收方式(通常为0)

send函数—数据发送返回值为实际发送的字节数或 -1 “sys/socket.h”

ssize_t send(intsocket, constvoid *buffer,size_t length, int flags)

(1)buffer : 发送缓冲区首地址(2)length : 发送的字节数(3)flags : 发送方式(通常为0)

read函数—数据接收 ssize_t read(int fd,void *buf, size_t count)

write函数—数据发送 ssize_t write(int fd,const void *buf, size_t count)

recvfrom函数—数据接收

ssize_t recvfrom(int socket, void *buffer, size_t length, intflags, struct sockaddr *address, socklen_t *address_len);

sendto函数—数据发送ssize_t sendto(int socket, void*message, size_t length, int flags, struct sockaddr *dest_addr,socklen_t dest_len);

close函数—关闭套接字int close(int sockfd)

shutdown函数—关闭套接字int shutdown(int sockfd, inthowto)

2、套接字socket有三种:流式套接字(使用TCP协议)—SOCK_STREAM、数据报套接字(使用UDP协议)—SOCK_DGRAM 、原始套接字

3、地址结构

struct sockaddr

{

u_short sa_family;

char sa_data[14];

}

Sa_family:地址族,采用“AF_xxx”的形式,如:AF_INET

网络编程一些知识 网络编程知识

Sa_data14字节的特定协议地址

struct sockaddr_in

{

short int sin_family;

unsigned short intsin_port;

struct in_addrsin_addr;

unsigned charsin_zero[8];

}

编程中一般并不直接针对sockaddr数据结构操作,而是使用与sockaddr等价的sockaddr_in数据结构

struct in_addr

{

unsignedlong s_addr;

}

S_addr: 32位的地址

4、字节序转换

网络字节顺序采用big endian排序方式

#include <arpa/inet.h>

uint32_t htonl(uint32_t hostlong); htonl:把unsignedlong类型从主机序转换到网络序

uint16_t htons(uint16_t hostshort); htons:把unsignedshort类型从主机序转换到网络序

uint32_t ntohl(uint32_t netlong); ntohl:把unsignedlong类型从网络序转换到主机序

uint16_t ntohs(uint16_t netshort); ntohs:把unsignedshort类型从网络序转换到主机序

5、OSI七层网络模型:应用层 表现层 会话层、传输层、网络层、数据链路层 物理层

LinuxTCP/IP四层概念模型:应用层、传输层、网际层、网络接口(物理层)

6、TCP/IP协议组大体上分为三部分:Internet协议—IP传输控制协议—TCP和用户数据报协议—UDP处于 TCP UDP之上的一组应用协议。它们包括:TELNET,文件传送协议(FTP),域名服务(DNS)和简单的邮件传送程序(SMTP)等

7、IO模型 -- 在UNIX/Linux下主要有4种I/O 模型:

--阻塞I/O

--非阻塞I/O

int fcntl(int fd, int cmd, long arg);

int flag;

flag = fcntl(sockfd, F_GETFL, 0);

flag |= O_NONBLOCK;

fcntl(sockfd, F_SETFL, flag);

--I/O多路复用

select函数“sys/time.h”“sys/types.h”“unistd.h”

int select(int n, fd_set *read_fds, fd_set *write_fds, fd_set*except_fds, struct timeval *timeout)

(1)n: maxfd所有监控的文件描述符中最大的那一个加1

(2)read_fds:所有要读的文件文件描述符的集合

(3)write_fds:所有要的写文件文件描述符的集合

(4)except_fds:其他要向我们通知的文件描述符

(5)timeout:超时设置.、NULL:一直阻塞,直到有文件描述符就绪或出错、时间值为0:仅仅检测文件描述符集的状态,然后立即返回、时间值不为0:在指定时间内,如果没有事件发生,则超时返回。

FD_SET将fd加入到fdsetFD_CLR将fd从fdset里面清除FD_ZERO从fdset中清除所有的文件描述FD_ISSET判断fd是否在fdset集合中

poll 函数“sys/poll.h” intpoll(struct pollfd *ufds, unsigned int nfds, int timeo

  

爱华网本文地址 » http://www.413yy.cn/a/25101013/167965.html

更多阅读

教学设计:信息安全问题及防范策略

教学设计:信息安全问题及防范策略课程内容标准1、树立信息安全意识,学会病毒防范、信息保护的基本方法;了解计算机犯罪的危害性,养成安全的信息活动习惯。2、在使用因特网的过程,能够识别并抵制不良信息;树立网络交流中的安全意识。一

关于皮料的一些知识 关于面料的知识

1,真皮的含义“真皮”在皮革制品市场上是常见的字眼,是人们为区别合成革而对天然皮革的一种习惯叫法。在消费者的观念中,“真皮”也有非假的含义。它主要是由动物的皮加工而成。真皮种类繁多,品种多样,结构不同,品质各异,价格也相差悬殊

核知识:轻水堆和重水堆

这些是一个78岁的核工业部老科学家教给我的一些知识,估计很难在一些书中找到,我整理一些感兴趣的简单的可公开的小内容,大家普及一下,但是先请大家记住这个老科学家的名字:董仕枢。为了与重水区别,目前将普通水称为轻水。就是核电厂反应堆

声明:《网络编程一些知识 网络编程知识》为网友长颈鹿少年分享!如侵犯到您的合法权益请联系我们删除