java网络编程基础
两个端系统进行通信是进程间通信,也就是说通信的对象具体到进程。用IP地址来识别主机,用端口号来识别进程。两个进程通过socket来发送和接收数据。Java提供了一套网络编程的API(应用程序接口)。
C/S(客户端/服务器)模式是非常典型的一种通信模式。有两个程序分别运行在服务器端和客户端才能进行网络通信。
那么要进行网络编程要干什么呢?
在服务器端:
1 用端口号为参数建立ServerSocket;
2 用accept()方法监听端口,进程自动阻塞,等待客户端连接;
3 有客户端连接后,accept()方法会返回一个socket对象;分别创建BufferedReader和PrintWriter的对象连接到该socket的输入输出流来进行读(接收)和写(发送);
4 通信完毕后关闭各个对象;
在客户端:
1 用服务器地址和端口号危机参数来创建socket对象;
2 分别创建BufferedReader和PrintWriter的对象连接到该socket的输入输出流来进行读(接收)和写(发送);
3 通信完毕后关闭各个对象。
先运行服务器端程序。
1 import java.io.*;
2 import java.net.*;
3
4 public classServer {
5 //设定端口号,例如10000;
6 static int portNum=10000;
7 public static void main(String[] args) throws IOException{
8 ServerSocket server_socket=new ServerSocket(portNum);
9 System.out.println("Server has been started:"+server_socket);
10 Socket socket=server_socket.accept();
11 System.out.println("Accept the client:"+socket);
12 BufferedReader in=new BufferedReader(new InputStreamReader(socket.getInputStream()));
13 PrintWriter out=new PrintWriter(socket.getOutputStream(),true);
14 try{
15 while(true){
16 String str=in.readLine();
17 if(str.equals("Bye")){
18 out.println("Bye");
19 break;
20 }
21 System.out.println("Received message:"+str);
22 out.println("Received message:"+str);
23 }
24 }
25 finally{
26 server_socket.close();
27 socket.close();
28 System.out.println("Server has been closed");
29 }
30 }
31 }
运行客户端程序。
1 import java.io.*;
2 import java.net.*;
3
4 public class Client {
5 //指定端口号,要和服务器指定的相同
6 static int portNum=10000;
7 public static void main(String[] args) throws IOException{
8 //由于测试是在同一台机运行服务器端,所以服务器地址是本机地址
9 InetAddress addr=InetAddress.getByName("localhost");
10 Socket socket=new Socket(addr,portNum);
11 System.out.println("Client has been started:"+socket);
12 BufferedReader in=new BufferedReader(new InputStreamReader(socket.getInputStream()));
13 PrintWriter out=new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())),true);
14 try{
15 out.println("Hello");
16 System.out.println("Received:"+in.readLine());
17 out.println("Bye");
18 System.out.println("Received:"+in.readLine());
19 }
20 finally{
21 socket.close();
22 System.out.println("Client has been closed");
23 }
24 }
25 }

浙公网安备 33010602011771号