码迷,mamicode.com
首页 > 其他好文 > 详细

网络编程

时间:2019-05-10 23:31:16      阅读:165      评论:0      收藏:0      [点我收藏+]

标签:stmp   完成   之间   strong   占用   主机   模型   启动   数据   

1.1 网络概念

计算机通过物理线路连接起来,就形成了网络。目的在于交换数据和共享信息。

 

1.1.1 网络通信的三要素

1IP地址:唯一标识网络上的每一台计算机。两台计算机之间通信的必备有素

2】端口号:计算机中应用的标号(代表一个应用程序)

0-1024系统使用或保留端口

常见端口:http:80 stmp: 25 ftp:21

    有效端口0-65536,开发者可以的端口是1025-65536之间一些第三方引用mysql:3306 oracle:1251

3】通信协议:通信的规则 TCP,UDP

1.1.2 网络通信模型

 技术图片

 

IP地址分类

技术图片

 

 

特殊IP

  • 0.0.0.0:本机
  • 127.0.0.1:本机回环地址,用于本机测试
  • 255.255.255.255:当前子网,一般用于向当前子网广播信息

 

1.2 InetAddress

InetAddress 表示IP地址。

 

 1 public class Test01 {
 2 
 3 public static void main(String[] args) {
 4 
 5 // 获取本机IP地址
 6 
 7 InetAddress ip1;
 8 
 9 try {
10 
11 ip1 = InetAddress.getLocalHost();
12 
13 // USER-20180113BT/192.168.2.56
14 
15 System.out.println(ip1.toString());
16 
17  
18 
19 // 获取主机名称
20 
21 System.out.println(ip1.getHostName());
22 
23 System.out.println(ip1.getHostAddress());
24 
25  
26 
27 } catch (UnknownHostException e) {
28 
29 e.printStackTrace();
30 
31 }
32 
33 }
34 
35 }

 

1.3 TCP 编程

TCP编程中,如果要完成通信,通信双方必须创建socket,通过socket完成通信

 

TCP通信步骤

[1] 服务器启动ServerSocket作为通信的Server端,等待客户端链入。

[2] 客户端创建Socket作为通信的Client

[3] Client链入Server后建立可靠的双向的持续性的点对点的通讯连接,即可通信

 

案例:完成一次单向通信。

服务器

 1 package cn.sxt01.net01;
 2 
 3  
 4 
 5 import java.io.IOException;
 6 
 7 import java.io.OutputStream;
 8 
 9 import java.net.ServerSocket;
10 
11 import java.net.Socket;
12 
13  
14 
15 public class Server01 {
16 
17 public static void main(String[] args) {
18 
19  
20 
21 System.out.println("服务器启动...");
22 
23  
24 
25 // 【1】创建server socket
26 
27 ServerSocket serverSocket = null;
28 
29 Socket clientSocket = null;
30 
31 try {
32 
33  
34 
35 serverSocket = new ServerSocket(8000);
36 
37 // 【2】等待客户端的链入->阻塞式函数->监听8000端口,看是否有client链入
38 
39 clientSocket = serverSocket.accept();
40 
41  
42 
43 System.out.println(clientSocket.getInetAddress().getHostAddress()+"链入!");
44 
45  
46 
47 // 【3】给客户端主动发信息
48 
49 OutputStream out = clientSocket.getOutputStream();
50 
51  
52 
53 String msg = "hello 兄弟";
54 
55 byte[] buf = msg.getBytes("UTF-8");
56 
57 out.write(buf);
58 
59 clientSocket.shutdownOutput();
60 
61  
62 
63 out.close();
64 
65  
66 
67  
68 
69 } catch (IOException e) {
70 
71 e.printStackTrace();
72 
73 }
74 
75 }
76 
77 }

 

 

客户端

 1 package cn.sxt02.net01;
 2 
 3  
 4 
 5 import java.io.IOException;
 6 
 7 import java.io.InputStream;
 8 
 9 import java.net.Socket;
10 
11  
12 
13 public class Client01 {
14 
15 public static void main(String[] args) {
16 
17 System.out.println("客户端运行...");
18 
19  
20 
21 // 【1】创建客户端socket
22 
23 Socket socket = null;
24 
25 try {
26 
27 socket = new Socket("192.168.2.56", 8000);
28 
29  
30 
31 // 【2】接收来自服务器的消息
32 
33 InputStream in = socket.getInputStream();
34 
35 byte[] buf = new byte[1024];
36 
37 int len = in.read(buf);
38 
39  
40 
41 String msg = new String(buf, 0, len, "UTF-8");
42 
43 System.out.println(msg);
44 
45  
46 
47 } catch (IOException e) {
48 
49 e.printStackTrace();
50 
51 }
52 
53 }
54 
55 }

 

 

常见问题

[1] 端口被占用

java.net.BindException: Address already in use: JVM_Bind
    at java.net.DualStackPlainSocketImpl.bind0(Native Method)
    at java.net.DualStackPlainSocketImpl.socketBind(DualStackPlainSocketImpl.java:106)
    at java.net.AbstractPlainSocketImpl.bind(AbstractPlainSocketImpl.java:387)
    at java.net.PlainSocketImpl.bind(PlainSocketImpl.java:190)
    at java.net.ServerSocket.bind(ServerSocket.java:375)
    at java.net.ServerSocket.<init>(ServerSocket.java:237)
    at java.net.ServerSocket.<init>(ServerSocket.java:128)
    at cn.sxt01.net02.Server01.main(Server01.java:19)

 

 

[2] 服务器未启动

java.net.ConnectException: Connection refused: connect

at java.net.DualStackPlainSocketImpl.connect0(Native Method)

at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:79)

at cn.sxt02.net02.Client01.main(Client01.java:15)

 

 

[3] 连接超时异常 SocketTimeoutException

网速很慢时,可能发生连接超时异常。

 

需求:上传图片到服务器

需求:控制台输入用户名和密码,如果输入正确提示登录成功,否则登录失败。

网络编程

标签:stmp   完成   之间   strong   占用   主机   模型   启动   数据   

原文地址:https://www.cnblogs.com/qq308015824/p/10847130.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!