linux c++ socket

一.TCP Server:

1.创建套接字socket():socket本质上就是一个int的数字,文件描述符,用于标识主机间端到端的通讯。两端的主机,通过对该socket进行读写,完成双方的通讯。

2.绑定 bind():是将已经新建好的套接字(即:socket)与本地的地址进行一个联系(即:将socket绑定到一个本地地址和端口上)。

3.将套接字设定为监听模式,准备接受客户端请求listen(): 监听是告诉客户端,服务器这边已经准备好了,等待为其服务啦。

4.接收连接 accept():等待客户端请求到来,当请求到来后,接受连接请求,返回一个新的对应于此连接的套接字.

5.读写 read()/write() : 关于读写的函数比较多,read()write(), recv()send()、recvfromsendto(),recvmsg()sendmsg()等。几组函数间比较相似,个别又有特点.

6.返回,等待另一个客户端请求.
7.关闭套接字.

二.TCP Client:

1.新建 socket()

2.连接 connect()

三.sockaddr_in数据结构

使用数据结构sockaddr_in存储IP和端口等参数

                     sockaddr_in(在netinet/in.h中定义):
1
2
3
4
5
6
7
8
9
10
11
12
13
struct sockaddr_in
 
{
 
short sin_family;/*Addressfamily一般来说AF_INET(地址族)PF_INET(协议族)*/
 
unsigned short sin_port;/*Portnumber(必须要采用网络数据格式,普通数字可以用htons()函数转换成网络数据格式的数字)*/
 
struct in_addr sin_addr;/*Internetaddress*/
 
unsigned char sin_zero[8];/*Samesizeasstructsockaddr没有实际意义,只是为了跟SOCKADDR结构在内存中对齐*/
 
};

四.函数

1. inet_pton(AF_INET,ip,&server_address.sin_addr)

    IP地址转换函数,可以在将IP地址在“点分十进制”和“二进制整数”之间转换

2. htons():host to network short

    将主机的无符号短整形数转换成网络字节顺序

 
面向无连接的套接字编程
服务器:(接收端)
1)       创建套接字(socket)
2)       将套接字绑定到一个本地地址和端口上(bind)
3)       用返回的套接字和客户端进行通信(recvfrom);
4)       关闭套接字
客户端:(发送端)
1)  创建套接字(socket)
2)  向服务器发送数据(sendto
3)  关闭套接字
原文地址:https://www.cnblogs.com/cj2014/p/4475981.html