java是运行在虚拟机上的,所以java的库包很多,java.net这个包专门提供了对网络编程的支持。
网络连接分server和client两部分:
server:
1 import java.io.BufferedReader; 2 import java.io.IOException; 3 import java.io.InputStreamReader; 4 import java.io.PrintWriter; 5 import java.net.ServerSocket; 6 import java.net.Socket; 7 8 9 public class testForNet {10 public static void main(String[]args)throws IOException{11 ServerSocket serverSocket = null;12 try{13 serverSocket = new ServerSocket(7788);14 System.err.println("the server is runing...");15 }catch(IOException e){16 System.err.println("fail to listing in port 7788");17 System.exit(0);18 }19 Socket clientSocket = null;20 try{21 clientSocket = serverSocket.accept();22 }catch(IOException e){23 System.err.println("fail to create a link...");24 System.exit(0);25 }26 String address = clientSocket.getInetAddress().getHostAddress();27 System.out.println("a link from "+address+ "was created!" );28 29 30 BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));31 PrintWriter out = new PrintWriter(clientSocket.getOutputStream(),true);32 33 String info = in.readLine();34 System.out.println("the message from client is :"+info);35 36 out.println("Hello client!");37 38 in.close();39 out.close();40 clientSocket.close();41 serverSocket.close(); 42 }43 44 }
在第13行,用Socket(7788)在端口号为7788的端口上建立一个监听,失败的话则抛出异常
在第21行,用accept()等待来自未知客户端的信息 ,在这里会产生一个终端,如果没client到来,会一直等待在第26行,获取了来自client的IP地址
在第30行,先获取client的数据流,转换成字符流,再建立一个缓冲流。in是用来读取数据临时对象
在第31行,建立写入数据的临时对象out
在第33行,从in里面读取一行数据,这是字符型的。
在第36行,把数据写入到out中。
client:
1 import java.io.BufferedReader; 2 import java.io.IOException; 3 import java.net.InetAddress; 4 import java.net.Socket; 5 import java.net.UnknownHostException; 6 import java.io.*; 7 8 public class testForNet1 { 9 public static void main(String [] agrs){10 Socket client = null;11 try{12 client = new Socket("127.0.0.1",7788);13 InetAddress server = client.getInetAddress();14 System.out.println("success to link with:"+server.getHostAddress());15 }catch(UnknownHostException e){16 System.out.println("the server address is wrong!");17 System.exit(-1);18 }catch(IOException e){19 System.out.println("failed in creating a link with server");20 System.exit(-1);21 }22 try{23 PrintWriter out = new PrintWriter(client.getOutputStream(),true);24 out.println("Hello,server");25 }catch(IOException e){26 System.err.println("IO Exception");27 }28 try{29 BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream()));30 String info = in.readLine();31 System.out.println("the message from server is:"+info);32 }catch(IOException e){33 System.err.println("IO Exception");34 } 35 }36 37 }
在第12行,建立与127.0.0.1的端口7788的连接
在第13行,获取服务器的地址,在第23行,建立写入的临时对象out
在第24行,往out里面写入数据
在第29行,建立临时读取对象in
在第30行,读取一行数据
整个连接通讯过程是,先运行server,服务器在等待未知的客户端连接,再运行client,向服务器发送信息,
服务器接收到信息后,给客户端发送信息。客户端接收信息后,打印,结束。
注:因为这是在同一台电脑上的测试,所以server和client的IP都是一样的。