具体函数讲解太多,根据程序自行分析。
可以参考这篇文章:
https://blog.youkuaiyun.com/qq_41687938/article/details/119102328?spm=1001.2014.3001.5501
https://blog.youkuaiyun.com/weixin_42193813/article/details/105666316
目录
一、socket
1.1 socket概述
socket是在应用层和传输层之间的一个抽象层,它把TCP/IP层复杂的操作抽象为几个简单的接口供应用层调用已实现进程在网络中通信。
socket起源于UNIX,在Unix一切皆文件哲学的思想下,socket是一种"打开—读/写—关闭"模式的实现,服务器和客户端各自维护一个"文件",在建立连接打开后,可以向自己文件写入内容供对方读取或者读取对方内容,通讯结束时关闭文件。
1.2 socket接口简介
socket():创建socket
bind():绑定socket到本地地址和端口,通常由服务端调用
listen():TCP专用,开启监听模式
accept():TCP专用,服务器等待客户端连接,一般是阻塞态
connect():TCP专用,客户端主动连接服务器
send():TCP专用,发送数据
recv():TCP专用,接收数据
sendto():UDP专用,发送数据到指定的IP地址和端口
recvfrom():UDP专用,接收数据,返回数据远端的IP地址和端口
close():关闭socket
1.3 Linux系统使用socket过程
在Linux下进行程序运行的方法:(假设已经编写好服务端程序(service.c),和客户端程序(client.c))
(需要开启两个终端)
1. 先分别对两个文件进行编译(分别执行以下两条命令)
gcc service.c -o service
gcc client.c -o client
2. 然后先运行服务器端
./service
3. 再在另一个终端中运行客户端
./client
4. 执行完成!
二、基于socket的TCP通信
2.1 基于socket技术的TCP通信流程
服务端(被动连接,需创建自己的地址信息)
创建一个套接字 ———socket()
绑定IP地址、端口等信息到socket上——bind()
监听套接字——listen()
等待客户端的连接请求——accept()
发送、接收数据——send()和recv(),或者read()和write()
关闭网络连接——close()
客户端
创建一个套接字——socket()
连接服务器——connect()
接收、发送数据——send()和recv(),或者read()和write()
关闭网络连接——close()