Java基础之Socket,TCP/IP篇

网络编程,两种方法;使用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 ,无法刷出数据。。。
        如何解决?在写完writer.write(数据)后,需要加上write.newLine()方法,表示新启一行后,才会将数据给写出去。 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 }

 

转载于:https://www.cnblogs.com/in-the-game-of-thrones/p/11319278.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值