C语言的TCP客户端实现

  • 格式:doc
  • 大小:33.00 KB
  • 文档页数:4

1、网络编程:
1、IP地址:点分形式十进制,用来在网络中标识某一台主机。

2、端口号:标识主机中处理网络数据的进程号(8080/9527/8888、6666、、、、)
3、socket:套接字(
1、是一种编程接口
2、是一个文件描述符(在Linux操作系统中,一切皆为文件)

4、套接字类型:
流式套接字:SOCK_STREAM
面向连接,保证数据的无差错,重复,丢失---》用于TCP通信的
数据报套接字:
面向无连接,--》用于UDP通信
原始套接字:
TCP --》
5、文件描述符:
是系统最小的,未用的标识符,(在内核中标识,被打开的文件),是一个非负整数。

对文件的操作都必须围绕文件描述符进行操作。

2、网络编程API
客户端:与用户进行交互的软件(用户可以查看某些信息,可以进行某些操作)
服务器:后台运行的程序,为客户端提供某种服务。

基于TCP网络服务器流程:
1、创建套接字
原型:
int socket(int domain, int type, int protocol);
参数:
domain:通信协议,Internet网络:AF_INET
type :套接字类型,流式套接字:SOCK_STREAM
protocol:0
返回值:
成功:套接字(网卡设备的文件描述符)
失败:-1,并且设置错误信息
头文件:
#include <sys/types.h>
#include <sys/socket.h>
2、将ip地址、端口号与套接字进行绑定bind
原型:
int bind(int sockfd, struct sockaddr *addr, int length);
参数:
sockfd:套接字(文件描述符),socket函数的返回值
addr :通用网络协议地址结构体的指针,用来存放ip地址、端口号
length:这个地址协议结构体大小
返回值:
成功:0
失败:-1,并设置错误信息
头文件:
#include <arpa/inet.h>
存储IP地址端口号的结构体:头文件《arpa/inet.h》
struct sockaddr_in {
u_short sin_family; // 地址族, AF_INET,2 bytes
u_short sin_port; // 端口,2 bytes
struct in_addr sin_addr; // IPV4地址,4 bytes
char sin_zero[8]; // 8 bytes unused,作为填充};
3、设置监听套接字listen
原型:
int listen(int sockfd, int backlog);
参数:
sockfd:套接字(socket函数返回值)
backlog:设置同一时刻允许的最大连接请求数
返回值:
成功:0
失败:-1,并设置错误信息
4、阻塞等待客户端连接(接受客户端连接)accept
原型:
int accept(int listenfd, struct sockaddr *addr, int *length);
参数:
listenfd: 监听之后的套接字
addr:通用协议地址结构体指针,用来存储连接客户端的IP地址和端口号
length:指针,结构体的长度(大小)
返回值:
成功:返回连接客户端的id号(该id号将会标识连接成功的客户端,数据交互就要围绕这个id号进行)
失败:-1,并设置错误信息
5、与连接的客户端进行数据交互(通信)read、write recv、send
int read(int fd, void *buf, int count);
功能:
从fd 对应的缓冲区读取count个字节的数据到buf 地址上。

参数:
fd:文件描述符(accept函数返回值,连接客户端的ID号)
buf:地址,用来保存读到的数据
count:设置要读取的数据的长度
返回值:
失败:-1
成功:实际读取的字节数
末尾:0
头文件:
#include <unistd.h>
int write(int fd, void *buf, int count);
功能:
将buf地址上的数据前count 个字节写入fd 对应的缓冲区中参数:
fd:文件描述符(accept函数返回值,连接客户端的ID号)
buf:地址,代写数据的来源地址
count:设置要写入(发送)的数据的长度
返回值:
失败:-1
成功:实际写入(发送)的字节数
头文件:
#include <unistd.h>
6、关闭套接字(关闭被打开的网卡设备文件)close
int close(int sockfd);
任务:
将TCP网络服务器进行完善
1、客户端发送数据,服务器读取后显示出来
2、当客户端发送"quit",时,服务器结束运行
3、客户端发送其他数据,服务器立即将读取的数据发送给客户端。