JAVA自学笔记,TCP程序设计

TCP传输控制协议是一种面向连接的,可靠的,基于字节流的传输层通信协议。在Java中,TCP程序设计是指利用ServerSocket类和Socket类编写的网络通信程序。利用TCP协议进行通信的两大应用程序是有主次之分的,一个称为服务器端程序,另一个称为客户端程序,两者的功能和编写方法大不一样。
在这里插入图片描述
1,服务器程序创建一个ServerSocket(服务器端套接字),调用accept()方法等待客户机来连接
2,客户端程序创建一个Socket,请求与服务器建立连接
3,服务器接收客户机的连接请求,同时创建一个新的Socket与客户端建立连接,服务器继续等待新的请求

ServerSocket服务器端

java.net包中的ServerSocket类用于表示服务器套接字,其主要功能是等待来自网络上的“请求”,它可以通过指定的接口来等待连接的套接字。服务器套接字一次可以与一个套接字连接。如果多台客户机同时提出连接请求,服务器套接字会将请求连接的客户机存入列队中,然后从中去除一个套接字,与服务器新建的套接字连接起来。若请求连接数大于最大容纳数,则多出的连接请求被拒绝。队列的默认大小是50。
ServerSocket类的构造方法都是抛出IOException异常,分别有以下几种形式。
1,ServerSocket():创建非绑定服务器套接字
2,ServerSocket(int port):创建绑定到特定端口的服务器套接字。
3,ServerSocket(int port,int backlog):利用指定的backlog创建服务器套接字并将其绑定到指定的本地端口号
4,ServerSocket(int port,int backlog,InetAddress bindAddress):使用指定的端口,侦听backlog和要绑定到的本地IP地址创建服务器。这种情况适用于计算机上有多块网卡和多个IP地址的情况,用于可以明确规定ServerSocket在哪块网卡或IP地址上等待客户的连接请求。
ServerSocket类的常用方法如下表:
在这里插入图片描述
使用ServerSocket对象的accept()方法时,会阻塞线程的继续执行,知道接收到客户端的呼叫。例如,下面代码中,如果没有客户端呼叫服务器,那么Sytem.out.println(“连接中”)语句将不会执行。实际操作过程中,如果没有客户端请求,accept()方法也没有发生阻塞,肯定是程序出现了问题,通常是使用了一个还在被其他程序占用的端口号,ServerSocket绑定没有成功。

Socket client = server.accept();
System.out.println("连接中");

Socket客户端

调用ServerSocket类的accept()方法会返回一个和客户端Socket对象相连接的Socket对象,java.net包中的Socket类用于表示客户端的套接字,它采用了TCP建立计算机之间的连接,并包含了Java语言所有对TCP有关的操作方法,如建立连接,传输数据,断开连接等。
Socket类定义了多个构造方法,它们可以根据InetAddress对象或者字符串指定的IP地址和端口号创建实例,其常用的构造方法如下:
1,Socket():通过系统默认类型的SocketImpl创建未连接套接字
2,Socket(InetAddress address,int port):创建一个流套接字并将其连接到指定IP地址的指定端口号。
3,Socket(InetAddress address,int port,InetAddress localAddr,int localPort):创建一个套接字并将其连接到指定远程地址上的指定远程端口。
4,Socket(String host,int port):创建一个流套接字并将其连接到 指定主机上的指定端口号。
5,Socket(String host,int port,InetAddress localAddr,int LocalPort):创建一个套接字并将其连接到指定远程主机上的指定远程端口。
Socket类的常用方法如下表:
在这里插入图片描述
开发TPC网络程序时,使用服务器端的套接字的accept()方法生成的Socket对象使用getOutputStream()方法获得的输出流将指向客户端Socket对象使用getInputStream()方法获得的对应输入流。同样,使用服务器套接字的accept()方法生成的Socket对象使用getInputStream()方法获得的输入流将指向客户端Socket对象使用getOutputStream()方法获得的对应输出流。也就是说当服务器向输出流写入信息时,客户端通过相应的输入流就可以读取,反之亦然。

TCP网络程序实例

这里我们通过TCP协议实现服务器端和客户端通信的功能。
服务器端代码:
在这里插入图片描述
客户端代码:
在这里插入图片描述

我们先启动服务器端,然后再启动客户端
服务器端运行结果:

客户端运行结果:
在这里插入图片描述
当一台机器上安装了多个网络应用程序时,很可能指定的端口号已经被占用,还可能遇到以前运行良好的网络程序突然运行不了的情况,这种情况很可能也是由于端口号被别的程序占用了,此时可以在cmd命令窗口中使用命令netstat -an查看本机已经使用的端口。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值