【JavaNET】Java网路编程(2)
前言:
本文内容:端口Port、通信协议、TCP实现聊天
推荐免费Java网络编程实战讲解视频:【狂神说Java】网络编程实战讲解_哔哩哔哩_bilibili
端口Port
端口表示计算机上的一个程序的进程:
-
不同的进程有不同的端口号!用来区分软件。
-
规定0-65535
-
TCP,UDP:65535*2 tcp:80,udp:80,单个协议下,端口不能冲突
-
端口分类:
-
公有端口 0-1023
- HTTP:80
- HTTPS:443
- FTP:21
- Telent:23
-
程序注册端口:1024-49151,分配用户或程序
- Tomcat:8080
- MySQL:3360
- Oracle:1521
-
动态、私有:49152-65535
1
2
3netstat -ano #查看所有的端口
netstat -ano|findstr"8080" #查看指定端口
tasklist|findstr"端口号" #查看指定端口的进程任务管理器:Ctrl+Shift+Esc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21package com.jokerdig.netDemo;
import java.net.InetSocketAddress;
import java.net.SocketAddress;
/**
* @author Joker大雄
* @data 2021/9/2 - 19:15
**/
public class Demo2 {
public static void main(String[] args) {
InetSocketAddress inetSocketAddress = new InetSocketAddress("127.0.0.1", 8080);
InetSocketAddress inetSocketAddress1 = new InetSocketAddress("localhost", 8080);
System.out.println(inetSocketAddress);
System.out.println(inetSocketAddress1);
System.out.println(inetSocketAddress.getAddress());//地址
System.out.println(inetSocketAddress.getHostName());//域名
System.out.println(inetSocketAddress.getPort());//端口
}
} -
通信协议
协议:约定,就好比沟通语言的类型(普通话)
**网络通信协议:**速率,传输码率,代码结构,传输控制…
**问题:**非常的复杂
大事化小:分层
TCP/IP协议:
-
TCP:用户传输协议
-
UDP:用户数据报协议
-
IP:网络互联协议
TCP/UDP对比:
- TCP:打电话
- 连接,稳定
- 三次握手,四次挥手
- 客户端、服务端
- 传输完成,释放连接,效率低
- UDP:发短信
- 不连接,不稳定
- 客户端,服务端没有明确的界线
- 不管有没有准备好,都可以发给你
- DDOS:洪水攻击(饱和攻击)
TCP实现聊天
客户端
-
连接服务器Socket
-
发送消息
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45package com.jokerdig.netDemo;
import java.io.IOException;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;
/**
* @author Joker大雄
* @data 2021/9/2 - 19:33
**/
//客户端
public class TcpClientDemo {
public static void main(String[] args) {
Socket socket = null;
OutputStream outputStream = null;
try {
// 要知到服务器的地址
InetAddress serverIP = InetAddress.getByName("127.0.0.1");
//端口号
int port = 9999;
//创建一个socket连接
socket = new Socket(serverIP,port);
//发送消息IO流
outputStream = socket.getOutputStream();
outputStream.write("Hello World send->".getBytes());//转换为字节
} catch (Exception e) {
e.printStackTrace();
}finally{
try {
//释放资源
if(outputStream!=null){
outputStream.close();
}
if(socket!=null){
socket.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
服务器
-
建立服务的端口ServerSocket
-
等待用户的连接 accept
-
接收用户消息
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64package com.jokerdig.netDemo;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;
/**
* @author Joker大雄
* @data 2021/9/2 - 19:33
**/
//服务端
public class TcpServerDemo {
public static void main(String[] args) {
ByteArrayOutputStream byteStream = null;
InputStream inputStream = null;
ServerSocket serverSocket = null;
Socket socket = null;
try {
//我得有一个地址
serverSocket = new ServerSocket(9999);
//等待客户端连接过来
socket = serverSocket.accept();
//读取客户端消息
inputStream = socket.getInputStream();
/* int len;
while((len=inputStream.read(buffer))!=1){
String msg= new String(buffer,0,len);
System.out.println(msg);
//这样中文进来会乱码
}
*/
//管道流
byteStream = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int len;
while ((len = inputStream.read(buffer)) != -1) {
byteStream.write(buffer, 0, len);
}
System.out.println(byteStream.toString());
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
//释放资源
if (byteStream != null) {
byteStream.close();
}
if (inputStream != null) {
inputStream.close();
}
if (socket != null) {
socket.close();
}
if (serverSocket != null) {
serverSocket.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Hey,Joker!
评论
ValineTwikoo