四十一、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、多线程代码如下:

三个客户端可访问这一个服务器,可与服务器通信回应,且客户端关了后,服务器可等待新的客户端连接

 

猜你喜欢

转载自blog.csdn.net/xk1761299425/article/details/81748578