网络通信与TCP
Posted 超霸霸
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了网络通信与TCP相关的知识,希望对你有一定的参考价值。
网络通信与TCP
一、计算机之间如何精确的连接?
-
ip地址
计算机通过ip地址找到对方的计算机,每台计算机的ip地址都是独一无二的
-
端口号
-
端口号是一个逻辑端口,我们无法直接看到,可以使用一些软件查看端口号
-
当我们使用网络软件一打开,那么操作系统就会为网络软件分配一个随机的端口号,或者网络软件在打开的时候和系统要指定的端口号
-
端口号由两个字节组成,取值范围在0-65535之间
-
1024之前的端口号我们不能使用,已经被系统分配给已知的网络软件了
-
网络软件的端口号不能重复使用
-
常用的端口号:
网络端口:80端口
数据库mysql:3306
oracle:1521
Tomcat服务器:8080
-
二、TCP通信概述
-
TCP通信能实现两台计算机之间的数据交互,通信的两端要严格区分为客户端(Client)和服务端(Server)
-
两端通信的步骤:
- 服务器程序启动,等待客户端连接
- 客户端主动连接服务器端,建立一个逻辑连接
注意:
- 这个连接包含一个IO对象,客户端和服务端使用IO对象进行通信
- 通信的数据不仅仅是字符,所以IO对象是字节流对象
- 客户端和服务端进行一个数据交互需要4个IO流对象
-
在Java中提供了两个类用于实现TCP通信程序:
- 客户端:
java.net.Socket
类表示创建Socket对象,向服务端发出连接请求,服务端响应请求,两者建立连接开始通信 - 服务端:
java.net.ServerSocket
类表示创建ServerSocket对象,相当于开启一个服务器,并等待客户的连接
- 客户端:
三、Socket类
- 该类实现客户端套接字,套接字指的是两台设备之间通信的端点
- 构造器:
- Socket类的方法:
- 创建一个Socket对象:
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
public class TCPClient {
public static void main(String[] args) throws IOException {
//1.创建一个客户端对象Socket,构造方法绑定服务器IP地址和端口号
Socket socket = new Socket("10.159.55.7", 8888);
//2.使用Socket对象中的方法getOutputStream()获取网络字节输出流OutputStream对象
OutputStream os = socket.getOutputStream();
//3.使用网络字节输出流OutputStream对象中的方法write向服务器发送数据
os.write("你好服务器".getBytes());
//4.使用Socket对象中的方法getInputStream()获取网络字节输入流InputStream对象
InputStream is = socket.getInputStream();
//5.使用网络字节输入流InputStream对象中的方法read读取服务器回写的数据
byte[] bytes = new byte[1024];
int len = is.read(bytes);
System.out.println(new String(bytes, 0, len));
//6.释放资源
socket.close();
}
}
四、ServerSocket类
-
服务器必须明确一件事,必须知道是哪个客户端请求的服务器,所以可以使用accept方法获取到请求的客户端对象Socket。成员方法:
Socket accept()
侦听并接受到此套接字的连接 -
构造方法:
- ServerSocket类的方法:
- 创建一个ServerSocket对象:
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class TCPServer {
public static void main(String[] args) throws IOException {
//1.创建服务器ServerSocket对象和系统要指定的端口号
ServerSocket server=new ServerSocket(8888);
//2.使用ServerSocket对象中的方法accept获取到请求的客户端对象Socket
Socket socket=server.accept();
//3.使用Socket对象中的方法getInputStream()获取网络字节输入流InputStream对象
InputStream is=socket.getInputStream();
//4.使用网络字节输入流InputStream对象中的方法read读取客户端发送的数据
byte[] bytes=new byte[1024];
int len=is.read(bytes);
System.out.println(new String(bytes,0,len));
//5.使用Socket对象中的方法getOutputStream()获取网络字节输出流OutputStream对象
OutputStream os=socket.getOutputStream();
//6.使用网络字节输出流OutputStream对象中的write方法给客户端回写数据
os.write("收到".getBytes());
//7.释放资源
socket.close();
server.close();
}
}
运行:
【注意】:先运行服务器端程序,再运行客户端程序
以上是关于网络通信与TCP的主要内容,如果未能解决你的问题,请参考以下文章