一、序言:
进一步的设计工作需要涉及到使用socket的工作;
项目分为服务端和用户端;
ps:因为队友(佬)已经承担的工作可以借用到自己的服务端上来,所以不需要自己再设计服务端了,但是学习还是有必要继续完成的。
二、socket简介:
1是什么:
是计算机之间进行通信的一种约定或一种方式。通过 socket 这种约定,一台计算机可以接收其他计算机的数据,也可以向其他计算机发送数据
Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。即Socket提供了操作上述特殊文件的接口.使用这些接口可以实现网络编程。
2如何使用:
通信方式包含了本地的和网络的。
前者我在“操作系统”一课已经有所学习,后者则于计算机网络中学习过。
我们这里再简单介绍一下后者:网络通信。
在网络通信的过程中,我们需要解决以下的问题:
- 如何识别主机?
- 如何识别进程?
答:在网络中,进程通过ip地址,协议,端口来进行通信。
这里就想到了经典的TCP/IP协议。
即有,“三次握手,四次挥手。”
三、TCP/IP
tcp 编程一般的步骤:
server(服务端)
1.new 个 socket
2.bind (IP,port)
3.listen,等待客户端的连接
4.accept 接受客户端的连接
5.接收(recv) 发送数据(send)
6.关闭连接client(客户端)
1.new 个 socket
2.bind(ip,port)
3.connect (server.ip,server,port)
4.recv() /send()
5.关闭连接
这是搭建原生的socket系统的基本途径。
这部分的介绍非常概要。在实际工作的过程中要注意灵活改变。
需要特别说明的是,在不同的操作系统中,socket的搭建并不一样。
我们是在linux环境下搭建的,因此需要对应的函数调用。
四、代码尝试demo
来自知乎的学习例子。可以阅读来借鉴。
基本的局域网聊天
局域网TCP服务端:
实现的功能是client到server的半双工通信,server只能接受接收client发送过来的消息,但是不能向client发送消息。
#include <sys/types.h> #include <sys/socket.h> #include <stdio.h> #include <netinet/in.h> #include <arpa/inet.h> #include <unistd.h> #include <string.h> #include <stdlib.h> #include <fcntl.h> #include <sys/shm.h> #include <thread> #include <iostream> #define PORT 7000 #define QUEUE 20//连接请求队列 int conn; void thread_task() { } int main() { //printf("%d\n",AF_INET);//IPv4协议 printf("%d\n",SOCK_STREAM);//字节流套接字