socket编程

Posted 五个板栗

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了socket编程相关的知识,希望对你有一定的参考价值。

一、网络套接字

1.什么是socket:网络通信的函数接口,在里面封装了传输层协议(tcp,udp)。

2.在通信过程中,套接字一定是成对出现的。一个文件描述符指向一个套接字,套接字内部借助两个缓冲区实现,一端的发送缓冲区对应另一端的接受缓冲区。

socket编程(1)_socket

二、网络字节序

1.小端法:高位存高地址,低位存低地址

2.大端法:高位存低地址,低位存高地址

如何判断是大端存储还是小端存储请看前期博客

3.TCP/IP协议规定,网络数据流应采用大端字节序,即低地址高字节。所以为了网络程序的可移植性,使得代码在大端和小端计算机上编译后都能够正常运行,通常要调用相关的库函数完成网络字节序和主机字节序的转换。如果主机是小端字节序,这些函数将参数做出相应的大小端转换然后返回,如果主机是大端字节序,这些函数不做转换,将参数原封不动地返回。

#include <arpa/inet.h>
uint32_t htonl(uint32_t hostlong);
uint16_t htona(uint16_t hostshort);
uint32_t ntohl(unit32_t netlong);
uint16_t ntoha(unit16_t netshort);

h表示host,n表示network,l表示32位长整数,s表示16位短整数

htonl 是将本地转网络(ip)

htons是将本地转网络(port)

ntoh1是将网络转本地(ip)

ntohs是将网络转本地(port)

以上是关于socket编程的主要内容,如果未能解决你的问题,请参考以下文章

C语言中数组高位转为低位

C语言 对字节的高位和低位进行互换!

如果只需要结果的低位部分,哪些 2 的补码整数运算可以在不将输入中的高位归零的情况下使用?

socket地址API

Java 高位低位

c语言中怎么将十六进制中的高位和低位分别存到数组中