套接字(socket)编程简单实现server-client聊天程序

1、socket

      在TCP/IP协议中,一个IP地址标识网络通讯中唯一一台主机,而一个IP地址+一个TCP(或UDP)端口号就可以标识网络通讯中的一个进程,此时的IP地址+端口号即称为socket。
      内存中的多字节数据相对于内存地址有大小端之分,磁盘文件中的多字节数据相对于文件中的偏移地址也有大小端之分,网络数据流同样也有大小端之分:先发出的数据是低地址,后发出的数据是搞地质,TCP/IP协议规定网络数据流采用大端字节序,即低地址高字节。
      1)计算机分为大端机和小端机,那么如何使同样的C代码在大端机和小端机上都能正常运行呢?库函数一节为我们提供了转换的接口:

include<arpa/inet.h>
unit32_t htonl(unit32_t hostlong);//32位的长整数从主机字节序转换为网络字节序
unit16_t htons(unit16_t hostshort);//16位的短整数从主机字节序转换为网络字节序
unit32_t ntohl(unit32_t netlong);//32位的长整数从网络字节序转换为主机字节序
unit16_t ntohs(unit16_t netshort);//16位的短整数从网络字节序转换为主机字节序

      2)由于网络传输是二进制比特流传输,所以必须将我们常用的十进制的IP地址与网络字节序的二进制形式的IP源码互相转换才可以将数据传输到准确的地址,下面是地址转换函数介绍:

int inet_aton(const char* cp, struct in_addr *inp);//将字符串cp的十进制转换为网络字节序的二进制形式后存储到inp中
char* inet_ntoa(struct in_addr *in);//将网络字节序的二进制形式转换为十进制的字符串形式,返回字符串的首地址

2、socket地址的数据类型及相关函数

      1)结构体
            IPV4套接字地址结构体:

struct sockaddr_in{
unit8_t sin_len;
sa_famliy_t sin_famliy;//协议家族
in_port_t sin_port;//端口号
struct in_addr  sin_addr;//IP地址
char sin_zero[8];
};

      通用套接字地址结构体:

struct sockaddr{
unit8_t sa_len;
sa_famliy sa_famlity;
char sa_data[14];
};

      2)相关函数
      socket:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值