Java TCP详解
Posted 剪水行舟
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java TCP详解相关的知识,希望对你有一定的参考价值。
title: TCP
date: 2021-06-07 22:42:01
tags: NET
categories: Java
description:
top_img:
comments:
cover:
TCP
InetAddress
作用:封装计算机的IP地址和DNS(没有端口信息)。
特点:这个类没有构造方法。如果要得到对象,只能通过静态方法:getLocalHost()、getByName()、 getAllByName()、 getAddress()、getHostName()。
//创建inetAddress对象
InetAddress localHost = InetAddress.getLocalHost();
//根据域名获得netAddress对象
InetAddress byName = InetAddress.getByName("www.163.com");
System.out.println(byName.getHostAddress());
//port
InetSocketAddress inetSocketAddress = new InetSocketAddress("127.0.0.1", 8080);
System.out.println(inetSocketAddress.getHostName());
//url
URL url = new URL("http://www.baidu.com:80/index.html?name=aaaa&age=18#a");
//协议
System.out.println("协议:"+url.getProtocol());
//域名|ip
System.out.println("域名|ip:"+url.getHost());
//资源
System.out.println("资源:"+url.getFile());
System.out.println("资源:"+url.getPath());
//端口
System.out.println("端口:"+url.getPort());
//参数
System.out.println("参数:"+url.getQuery());
//锚点
System.out.println("锚点:"+url.getRef());
基础介绍
-
创建服务器ServerSocket,在创建时,定义ServerSocket的监听端口(在这个端口接收客户端发来的消息)。
-
ServerSocket调用accept()方法,使之处于阻塞状态。
-
创建客户端Socket,并设置服务器的IP及端口。
-
客户端发出连接请求,建立连接。
-
-
分别取得服务器和客户端Socket的InputStream和OutputStream。
-
利用Socket和ServerSocket进行数据传输。
-
关闭流及Socket。
TCP实例
TCP Server
//指定端口 使用ServerSocket创建服务器
ServerSocket serverSocket = new ServerSocket(9999);
//阻塞式等待连接accept
Socket client = serverSocket.accept();
System.out.println("一个客户端建立了了连接");
//输入输出流操作
DataInputStream dataInputStream = new DataInputStream(client.getInputStream());
String s = dataInputStream.readUTF();
System.out.println(s);
//释放资源
dataInputStream.close();
client.close();
serverSocket.close();
TCP Client
// 建立连接 创建客户端 使用Socket 指定服务器地址和端口
Socket client = new Socket("localhost",9999);
//输入输出流操作
DataOutputStream dataOutputStream = new DataOutputStream(client.getOutputStream());
dataOutputStream.writeUTF("哈哈哈哈哈哈哈");
dataOutputStream.flush();
//释放资源
dataOutputStream.close();
client.close();
TCP Two Way Server
//指定端口 使用ServerSocket创建服务器
ServerSocket serverSocket = new ServerSocket(9999);
//阻塞式等待连接accept
Socket client = serverSocket.accept();
System.out.println("一个客户端建立了了连接");
//输入输出流操作
DataOutputStream dataOutputStream = new DataOutputStream(client.getOutputStream());
DataInputStream dataInputStream = new DataInputStream(client.getInputStream());
String s = dataInputStream.readUTF();
String[] data = s.split("&");
for (String info:data){
String[] userInfo = info.split("=");
System.out.println(userInfo[0]+"---"+userInfo[1]);
}
dataOutputStream.writeUTF("hahahahahh");
//释放资源
dataInputStream.close();
dataOutputStream.close();
client.close();
serverSocket.close();
}
TCP Two Way Client
// 建立连接 创建客户端 使用Socket 指定服务器地址和端口
BufferedReader console = new BufferedReader(new InputStreamReader(System.in));
System.out.println("请输入用户名:");
String uname = console.readLine();
System.out.println("亲输入密码:");
String upwd = console.readLine();
Socket client = new Socket("localhost",9999);
//输入输出流操作
DataOutputStream dataOutputStream = new DataOutputStream(client.getOutputStream());
DataInputStream dataIntputStream = new DataInputStream(client.getInputStream());
dataOutputStream.writeUTF("uname="+uname+"&upwd="+upwd);
dataOutputStream.flush();
String s = dataIntputStream.readUTF();
System.out.println(s);
//释放资源
dataIntputStream.close();
dataOutputStream.close();
client.close();
}
TCP Multil Server
public static void main(String[] args) throws IOException {
System.out.println("----------Server----------");
//指定端口 使用ServerSocket创建服务器
ServerSocket serverSocket = new ServerSocket(9999);
boolean isRun = true;
//阻塞式等待连接accept
while (isRun){
Socket client = serverSocket.accept();
new Thread(new Channel(client)).start();
System.out.println("一个客户端建立了了连接");
}
serverSocket.close();
}
public static class Channel implements Runnable{
private Socket client;
private DataInputStream dataInputStream;
public Channel(Socket client) throws IOException {
this.client = client;
dataInputStream = new DataInputStream(client.getInputStream());
}
@Override
public void run() {
//输入输出流操作
try {
String data = dataInputStream.readUTF();
System.out.println("一个线程的数据:"+data);
} catch (IOException e) {
e.printStackTrace();
}
//释放资源
try {
dataInputStream.close();
client.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
TCP Multil Client
// 建立连接 创建客户端 使用Socket 指定服务器地址和端口
Socket client = new Socket("localhost",9999);
//输入输出流操作
DataOutputStream dataOutputStream = new DataOutputStream(client.getOutputStream());
dataOutputStream.writeUTF("哈哈哈哈哈哈哈");
dataOutputStream.flush();
//释放资源
dataOutputStream.close();
client.close();
以上是关于Java TCP详解的主要内容,如果未能解决你的问题,请参考以下文章