网络编程,两种方法;使用TCP/IP(性能低,数据较安全) 或 UDP(性能高,数据不安全)
TCP/IP 方式,服务器端(注意使用PrintWriter + OutputStream方法才能刷出数据)
1 package com.imooc.demo.tcpip;
2
3 import java.io.*;
4 import java.net.ServerSocket;
5 import java.net.Socket;
6 import java.util.Scanner;
7
8 /**
9 * TCP/IP协议的网络编程
10 * 双向连接
11 * 服务器端
12 */
13 public class ServerDemo {
14
15 public static void main(String[] args) throws Exception{
16 Scanner scanner = new Scanner(System.in);
17 System.out.println("服务端准备就绪!");
18 ServerSocket server = new ServerSocket(8888);
19 Socket client = server.accept();
20 System.out.println(client+"进入服务器");
21 InputStream is = client.getInputStream();
22 BufferedReader reader = new BufferedReader(new InputStreamReader(is));
23 System.out.println("在服务器这端,接受客户端发送的信息"+reader.readLine());
24
25 PrintWriter writer = new PrintWriter(client.getOutputStream());
26 // PrintWriter writer = new PrintWriter(client.getOutputStream(),true);//自动刷
27 writer.println(scanner.nextLine());
28 writer.flush();//手动刷
29 scanner.close();
30 writer.close();
31 reader.close();
32 is.close();
33 client.close();
34 server.close();
35 }
36
37 }
TCP/IP 方式,客户端
1 package com.imooc.demo.tcpip;
2
3 import java.io.*;
4 import java.net.InetAddress;
5 import java.net.Socket;
6 import java.util.Scanner;
7
8 /**
9 * TCP/IP协议的网络编程
10 * 双向连接
11 * 客户端
12 */
13 public class ClientDemo {
14
15 public static void main(String[] args)throws Exception {
16 Scanner scanner = new Scanner(System.in);
17 Socket server = new Socket("localhost", 8888);
18 OutputStream os = server.getOutputStream();//socket获取输出流
19 PrintWriter writer = new PrintWriter(os);
20 /**
21 * 使用 BufferedWriter ,无法刷出数据。。。
22 * 一直处于等待状态
23 */
24 // BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(os));
25 writer.println("客户端发送:"+scanner.nextLine());
26 writer.flush();
27 BufferedReader reader = new BufferedReader(new InputStreamReader(server.getInputStream()));
28 System.out.println("在客户端这端,接受服务器端发送的信息:"+reader.readLine());
29 reader.close();
30 writer.close();
31 os.close();
32 server.close();
33 scanner.close();
34 }
35 }
示例二:
客户端循环输入,当输入quit结束
1 import java.io.BufferedReader;
2 import java.io.BufferedWriter;
3 import java.io.IOException;
4 import java.io.InputStream;
5 import java.io.InputStreamReader;
6 import java.io.OutputStream;
7 import java.io.OutputStreamWriter;
8 import java.net.Socket;
9 import java.net.UnknownHostException;
10 import java.util.Scanner;
11
12 //客户端
13 public class Client {
14 public static void main(String[] args) {
15 Scanner input = new Scanner(System.in);
16 try {
17 //在new对象的时候,就会建立连接
18 Socket server =new Socket("localhost",6666);
19
20 //接收服务器的数据
21 InputStream in = server.getInputStream();
22 InputStreamReader isr = new InputStreamReader(in);
23 BufferedReader reader = new BufferedReader(isr);
24
25 //向服务器发送数据
26 OutputStream out = server.getOutputStream();
27 OutputStreamWriter osw = new OutputStreamWriter(out);
28 BufferedWriter writer = new BufferedWriter(osw);
29 System.out.println("输入要发送到服务器的内容(输入quit结束):");
30 while (true) {
31 //发送
32 String msg = input.nextLine();
33 writer.write(msg);
34 writer.newLine();
35 writer.flush();
36
37 //接收
38 String serverMsg = reader.readLine();
39 System.out.println(serverMsg);
40
41 if("quit".equalsIgnoreCase(msg) ){
42 break;
43 }
44 }
45
46 server.close();
47
48 } catch (UnknownHostException e) {
49 e.printStackTrace();
50 } catch (IOException e) {
51 e.printStackTrace();
52 }
53 }
54 }
服务端
1 import java.io.BufferedReader;
2 import java.io.BufferedWriter;
3 import java.io.IOException;
4 import java.io.InputStream;
5 import java.io.InputStreamReader;
6 import java.io.OutputStream;
7 import java.io.OutputStreamWriter;
8 import java.net.ServerSocket;
9 import java.net.Socket;
10
11 //服务端
12 public class Server {
13 public static void main(String[] args) {
14 //端口
15 int port = 10000;
16 try {
17 ServerSocket server = new ServerSocket(port);
18
19 //接收客户端的连接
20 //accept方法会一直等待客户端的连接
21 Socket client = server.accept();
22 System.out.println(client + "进入服务器");
23 //获取输出流,用于向客户端写数据
24 OutputStream out = client.getOutputStream();
25 OutputStreamWriter osw = new OutputStreamWriter(out);
26 BufferedWriter writer = new BufferedWriter(osw);
27
28 //接收客户端的数据
29 InputStream in = client.getInputStream();
30 InputStreamReader isr = new InputStreamReader(in);
31 BufferedReader reader = new BufferedReader(isr);
32
33
34 while(true){
35 //接收
36 String msg = reader.readLine();
37 System.out.println("客户端说:"+ msg);
38
39 //发送
40 writer.write("你发送的消息是:"+msg);
41 writer.newLine();
42 writer.flush();
43
44 if("quit".equalsIgnoreCase(msg)){
45 break;
46 }
47 }
48
49 client.close();
50 } catch (IOException e) {
51 e.printStackTrace();
52 }
53 }
54 }