Java基础--网络编程

1.网络的概念

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

2.网络通信的三要素:

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

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

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

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

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

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

3.网络通信模型

扫描二维码关注公众号,回复: 6195316 查看本文章

4.InetAdress

InetAddress 表示IP地址。

 1 public class Test01 {
 2     public static void main(String[] args) {
 3         // 获取本机IP地址
 4         InetAddress ip1;
 5         try {
 6             ip1 = InetAddress.getLocalHost();
 7             // USER-20180113BT/192.168.2.56
 8             System.out.println(ip1.toString());
 9             
10             // 获取主机名称
11             System.out.println(ip1.getHostName());
12             System.out.println(ip1.getHostAddress());
13             
14         } catch (UnknownHostException e) {
15             e.printStackTrace();
16         }
17     }
18 }

 5.TCP编程

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

TCP通信步骤

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

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

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

案例:完成一次单向通信

服务器端

 1 package cn.sxt01.net01;
 2 
 3 import java.io.IOException;
 4 import java.io.OutputStream;
 5 import java.net.ServerSocket;
 6 import java.net.Socket;
 7 
 8 public class Server01 {
 9     public static void main(String[] args) {
10         
11         System.out.println("服务器启动...");
12         
13         // 【1】创建server socket
14         ServerSocket serverSocket = null;
15         Socket clientSocket = null;
16         try {
17         
18             serverSocket = new ServerSocket(8000);
19             // 【2】等待客户端的链入->阻塞式函数->监听8000端口,看是否有client链入
20             clientSocket = serverSocket.accept();
21             
22             System.out.println(clientSocket.getInetAddress().getHostAddress()+"链入!");
23         
24             // 【3】给客户端主动发信息
25             OutputStream out = clientSocket.getOutputStream();
26             
27             String msg = "hello 兄弟";
28             byte[] buf = msg.getBytes("UTF-8");
29             out.write(buf);
30             clientSocket.shutdownOutput();
31             
32             out.close();
33             
34         
35         } catch (IOException e) {
36             e.printStackTrace();
37         }
38     }
39 }

客户端

 1 package cn.sxt02.net01;
 2 
 3 import java.io.IOException;
 4 import java.io.InputStream;
 5 import java.net.Socket;
 6 
 7 public class Client01 {
 8     public static void main(String[] args) {
 9         System.out.println("客户端运行...");
10         
11         // 【1】创建客户端socket
12         Socket socket = null;
13         try {
14             socket = new Socket("192.168.2.56", 8000);
15             
16             // 【2】接收来自服务器的消息
17             InputStream in = socket.getInputStream();
18             byte[] buf = new byte[1024];
19             int len = in.read(buf);
20             
21             String msg = new String(buf, 0, len, "UTF-8");
22             System.out.println(msg);
23             
24         } catch (IOException e) {
25             e.printStackTrace();
26         }
27     }
28 }

 6.常见问题

[1] 端口被占用

java.net.BindException: Address already in use: JVM_Bind

【2】服务器未启动

java.net.ConnectException: Connection refused: connect

【3】连接超时异常 SocketTimeoutException

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

猜你喜欢

转载自www.cnblogs.com/WhiperHong/p/10846976.html