网络编程是指编写运行在多个设备(计算机)的程序,这些设备都通过网络连接起来。java.net包中提供了两种常见的网络协议的支持:
- TCP: TCP是传输控制协议的缩写,它保障了两个应用程序之间的可靠通信。通常用于互联网协议,被称TCP / IP。
- UDP:UDP是用户数据报协议的缩写,一个无连接的协议。提供了应用程序之间要发送的数据的数据包。
在这里我们主要讲解socket编程(使用最为广泛的网络编程),举个简单的例子,就像是我们平常用的QQ,每个人用的都是一个Client(客户端),而服务端则是腾讯的服务器,我们彼此之间的通信是通过先将消息发送到服务端,然后服务端转发到目标客户端(你想要发送给的对象),而不是每个客户端直接通信。由此我们可以得出socket通信的基本流程:首先是客户端:通过IP地址和port(端口号)与服务端建立连接->进行信息传递—>关闭连接,然后是服务端:对客户端进行监听—>建立连接—>信息传递—>关闭连接。下面是一个简单的实现客户端和服务端通信的例子: 服务端: 1 package com.internet.server; 23 import java.io.IOException; 4 import java.io.InputStream; 5 import java.io.OutputStream; 6 import java.net.ServerSocket; 7 import java.net.Socket; 89 public class TestServer {10 public static void main(String[] args) {11 ServerSocket serverSocket = null;12 Socket socket = null;13 OutputStream out = null;14 InputStream in = null;15 int port = 12125;16 17 try {18 serverSocket = new ServerSocket(port);19 System.out.println("服务端开始监听!!!");20 socket = serverSocket.accept();21 in = socket.getInputStream();22 byte[] b = new byte[1024];23 out = socket.getOutputStream();24 for (int i = 0; i < 3; i++) {25 int n = in.read(b);26 System.out.println("接收到的信息为:" + new String(b, 0, n));27 out.write(b, 0, n);28 }29 30 } catch (IOException e) {31 e.printStackTrace();32 } finally {33 try {34 out.close();35 in.close();36 socket.close();37 serverSocket.close();38 } catch (IOException e) {39 e.printStackTrace();40 }41 }42 43 }44 } 客户端: 1 package lib; 23 import java.io.IOException; 4 import java.io.InputStream; 5 import java.io.OutputStream; 6 import java.net.Socket; 78 public class TestClient { 9 public static void main(String[] args) throws InterruptedException,10 IOException {11 Socket socket = null;12 InputStream in = null;13 OutputStream out = null;14 // 定义端口15 int port = 12125;16 // 服务端的IP地址17 String serverIP = "127.0.0.1";18 // 传递的数据19 String data[] = { "First", "Second", "Third" };20 try {21 socket = new Socket(serverIP, port);22 out = socket.getOutputStream();23 in = socket.getInputStream();24 byte[] b = new byte[1024];25 for (int i = 0; i < data.length; i++) {26 out.write(data[i].getBytes());27 int n = in.read(b);28 System.out.println("传递的数据为:" + new String(b, 0, n));29 }30 } catch (IOException e) {31 e.printStackTrace();32 } finally {33 in.close();34 out.close();35 socket.close();36 }37 }38 } 服务端和客户端之间是通过我们之前提到的“流“(字节流)的方式进行信息传递的。在上述代码中我们需要保证客户端和服务端的端口号是一致的,同时客户端中的IP地址我们可以填写本机地址,即127.0.0.1也可以填写外网IP。只需要一个服务端即可,然后在多个客户端之间实现通信,当然这只是简单的信息传递,如果想要编写出类似于QQ的简单的小程序还需要swing,多线程等知识,感兴趣的小伙伴可以自行尝试。
本文永久更新链接地址:http://www.linuxidc.com/Linux/2016-11/136611.htm