• 爱情文章
  • 亲情文章
  • 友情文章
  • 生活随笔
  • 校园文章
  • 经典文章
  • 人生哲理
  • 励志文章
  • 搞笑文章
  • 心情日记
  • 英语文章
  • 范文大全
  • 作文大全
  • 新闻阅读
  • 当前位置: 山茶花美文网 > 亲情文章 > 正文

    TCP编程函数和步骤详解_java 函数式编程 详解

    时间:2020-05-25来源:山茶花美文网 本文已影响 山茶花美文网手机站

    TCP编程的服务器端一般步骤是

    1、 创建一个socket,用函数socket();

    2、 设置socket属性,用函数setsockopt(); * 可选

    3、 绑定IP地址、端口等信息到socket上,用函数bind();

    4、 开启监听,用函数listen();

    5、 接收客户端上来的连接,用函数accept();

    6、 收发数据,用函数send()和recv(),者read()和write();

    7、 关闭网络连接;

    8、 关闭监听;

    TCP编程的客户端一般步骤是:

    1、 创建一个socket,用函数socket();

    2、 设置socket属性,用函数setsockopt();* 可选

    3、 绑定IP地址、端口等信息到socket上,用函数bind();* 可选

    4、 设置要连接的对方的IP地址和端口等属性;

    5、 连接服务器,用函数connect();

    6、 收发数据,用函数send()和recv(),或者read()和write();

    7、 关闭网络连接;

    UDP编程的服务器端一般步骤是:

    1、 创建一个socket,用函数socket();

    2、 设置socket属性,用函数setsockopt();* 可选

    3、 绑定IP地址、端口等信息到socket上,用函数bind()

    4、 循环接收数据,用函数recvfrom();

    5、 关闭网络连接;

    UDP编程的客户端一般步骤是:

    1、 创建一个socket,用函数socket();

    2、 设置socket属性,用函数setsockopt();* 可选

    3、 绑定IP地址、端口等信息到socket上,用函数bind();* 可选

    4、 设置对方的IP地址和端口等属性;

    5、 发送数据,用函数sendto();

    6、 关闭网络连接;

    常用的网络命令:

    netstat

    命令netstat是用来显示网络的连接,路由表和接口统计等网络的信息.netstat有许多的选项我们常用的选项是 -an 用来显示详细的网络状态.至于其它的选项我们可以使用帮助

    telnet

    telnet是一个用来远程控制的程序,但是我们完全可以用这个程序来调试我们的服务端程序的. 比如我们的服务器程序在监听8888端口,我们可以用telnet localhost 8888来查看服务端的状况

    数据结构

    1、地址结构

    struct sockaddr_in {

    short int sin_family; /* 地址族 一般为AF-INET */

    unsigned short int sin_port; /* 端口号 */

    struct in_addr sin_addr; /* IP地址 */

    unsigned char sin_zero[8]; /* 填充0 以保持与struct sockaddr同样大小 使用memset()或bzero()来填充*/

    };

    struct sockaddr {

    unsigned short sa_family; /* 地址族, AF_xxx */

    char sa_data[14]; /* 14 字节的协议地址 */

    };

    2、DNS结构

    struct hostent {

    char *h_name; /* 主机的官方域名 */

    char **h_aliases; /* 一个以NULL结尾的主机别名数组 */

    int h_addrtype; /* 返回的地址类型,在Internet环境下为AF-INET */

    int h_length; /*地址的字节长度 */

    char **h_addr_list; /* 一个以0结尾的数组,包含该主机的所有地址*/

    };

    操作函数

    1、 socket:

    创建socket 描述符

    int socket(int domain, int type, int protocol);

    domain=AF_INET,socket的类型,type=SOCK_STREAM 或SOCK_DGRAM,分别表示TCP连接和UDP连接;protocol=0。

    返回一个整型socket描述符。

    2.bind:

    将socket描述符与你本机上的一个端口相关联(仅用于服务器)

    int bind(int sockfd,struct sockaddr *my_addr, int addrlen);

    Sockfd是一个socket描述符

    my_addr是一个指向包含有本机IP地址及端口号等信息的sockaddr类型的指针;

    addrlen=sizeof(struct sockaddr)。

    返回:成功=0;失败=-1,errno=错误号。

    可以用下面的赋值自动获得本机IP地址和随机获取一个没有被占用的端口号:

    my_addr.sin_port = 0; /* 系统随机选择一个未被使用的端口号 */

    my_addr.sin_addr.s_addr = INADDR_ANY; /* 填入本机IP地址 */

    3.Connect:

    与远端服务器建立一个TCP连接 (用于客户端)

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

    Sockfd是目的服务器的sockt描述符

    serv_addr是包含目的机IP地址和端口号的指针。

    返回:成功=0;失败=-1,errno=错误号。

    4、Listen:

    监听是否有服务请求 ,用于bind()后

    int listen(int sockfd, int backlog);

    Sockfd是Socket系统调用返回的socket 描述符;

    backlog指定在请求队列中允许的最大请求数,缺省值为20。

    返回:成功=0;失败=-1,errno=错误号。

    5.accept:

    接受来自客户的请求

    int accept(int sockfd, void *addr, int *addrlen);

    sockfd是被监听的socket描述符,

    addr 是指向sockaddr_in变量的指针,存放客户主机的信息 ;

    addrten 指向值为sizeof(struct sockaddr_in)的整型指针变量。

    返回:成功返回一个新的socket描述符,来供这个新连接来使用。 错误发生时返回一个-1并且设置相应的errno值。

    6.Send:

    在连接(TCP)的socket方式下发送信息

    int send(int sockfd, const void *msg, int len, int flags);

    Sockfd是用来传输数据的socket描述符

    msg是一个指向要发送数据的指针。

    Len是以字节为单位的数据的长度。

    flags一般情况下置为0。

    7.recv:

    在连接(TCP)的socket方式下接收数据

    int recv(int sockfd,void *buf,int len,unsigned int flags);

    Sockfd是接受数据的socket描述符;

    buf 是存放接收数据的缓冲区;

    len是缓冲的长度。

    Flags也被置为0。

    返回:实际上接收的字节数,如果连接中止,返回0,。出现错误时,返回-1并置相应的errno值。

    8.sendto:

    在在无连接(UDP)的socket方式下发送数据

    int sendto(int sockfd, const void *msg,int len,unsigned int flags,const struct sockaddr *to, int tolen);

    to表示目地机的IP地址和端口号信息

    tolen=sizeof (struct sockaddr)。

    返回:实际发送的数据字节长度或在出现发送错误时返回-1。

    9.Recvfrom()

    在无连接(UDP)的socket方式下接收数据

    int recvfrom(int sockfd,void *buf,int len,unsigned int flags,struct sockaddr *from,int *fromlen);

    from 保存源机的IP地址及端口号。

    fromlen=sizeof(struct sockaddr)。

    返回:实际存入from中的数据字节数。当出现错误时返回-1,并置相应的errno。

    10.close()

    释放socket,停止任何数据操作

    close(sockfd);

    11.shutdown:

    单向关闭连接

    int shutdown(int sockfd,int how);

    how可以设为下列值:

    ·0-------不允许继续接收数据

    ·1-------不允许继续发送数据

    ·2-------不允许继续发送和接收数据,均为允许则调用close ()

    shutdown在操作成功时返回0,在出现错误时返回-1(并置相应errno)。

    12. gethostbyname:

    域名和IP地址的转换

    struct hostent *gethostbyname(const char *name);

    13.inet_pton函数:

    将点分十进制串转换成网络字节序二进制值,此函数对IPv4地址和IPv6地址都能处理。

    int inet_pton(int family,const char * strptr,void * addrptr);

    第一个参数可以是AF_INET或AF_INET6:第二个参数是一个指向点分十进制串的指针:第三个参数是一个指向转换后的网络字节序的二进制值的指针。

    返回:1---成功 0---输入不是有效的表达格式 -1---失败

    14.inet_ntop函数:

    和inet_pton函数正好相反,inet_ntop函数是将网络字节序二进制值转换成点分十进制串。

    const char * inet_ntop(int family,const void * addrptr,char * strptr,size_t len);

    第一个参数可以是AF_INET或AF_INET6:第二个参数是一个指向网络字节序的二进制值的指针;第三个参数是一个指向转换后的点分十进制串的指针;第四个参数是目标的大小,以免函数溢出其调用者的缓冲区。

    返回:指向结果的指针---成功 NULL---失败

    • TCP编程函数和步骤详解_java 函数式编程 详解 相关文章:
    • 爱情文章
    • 亲情文章
    • 友情文章
    • 随笔
    • 哲理
    • 励志
    • 范文大全