四十一、TCP网络:TCP的服务端和客户端、TCP 多进程、多线程 服务器
一、TCP服务器代码的编写
1、改成桥接模式:能通信
2、网络调试助手要选择TCP Client(客户端)、服务器和端口号要填写服务器的(虚拟机的)
3、服务端代码如下:
二、TCP客户端代码的编写
1、在虚拟机上运行代码(与服务端代码是两个文件)
2、可与网络调试助手通信(调试助手当做服务端,在虚拟机上运行代码当客户端,运行的代码必须写上ip地址),
也可在虚拟机上两个终端互相通信(一个终端运行客户端,一个运行服务端,都绑定/链接 虚拟机IP,绑定端口一致)
3、Ctrl + shift + t 打开新的终端
4、TCP客户端已经链接好了服务器,所以在以后的数据发送中,不需要填写对方的ip和端口号
5、对于套接字,服务器端有两个,客户端有一个。
6、注意:链接服务器 — 参数类型是一个元组。
7、运行的时候先启动服务器端,再运行脚本文件
8、客户端代码如下:
三、TCP 多进程服务器
(1)listen参数问题
linux系统它自己有最大值,你写的不管用,这就是为什么linux系统合适做web服务器开发
(2)多进程
1、虚拟机用桥接模式(本机是桥接模式才能连通)
2、serSocket不固定,是自己创建的套接字对象,后面的固定写法
3、一般来说,一个端口释放后会等待两分钟之后才能再被使用,SO_REUSEADDR是让端口释放后立即就可以被再次使用。SO_REUSEADDR用于对TCP套接字处于TIME_WAIT状态下的socket,允许重复绑定使用。server程序总是应该在调用bind()之前设置SO_REUSEADDR套接字选项。
4、多进程服务器示例代码:
填写服务器的IP地址和端口号
四、TCP多线程服务器
1、对于效率这一块,差不多的,但是进程耗费的资源要大,线程耗费的资源要小。
2、不管是多进程还是多线程代码几乎一样,区别在于:在多线程中newSocket.close()不能关闭,
因为线程是共享同一份资源的,也就是共享全局变量的,传递东西也就是传递的引用,
一个进程里面所有的线程都有共用同一份东西的。
3、多线程代码如下:
三个客户端可访问这一个服务器,可与服务器通信回应,且客户端关了后,服务器可等待新的客户端连接