Java基础笔记——网络编程TCP

 

//---------------------------------------------------------------------------服务器端多线程:就是和多个客户端连接
1
package com.peng.Socket_TCP; 2 3 import java.io.BufferedReader; 4 import java.io.IOException; 5 import java.io.InputStream; 6 import java.io.InputStreamReader; 7 import java.io.OutputStream; 8 import java.io.PrintWriter; 9 import java.net.Socket; 10 11 public class ServerThread extends Thread { 12 // 和本线程相关的Socket 13 Socket socket = null; 14 15 public ServerThread(Socket socket) { 16 this.socket = socket; 17 } 18 19 //线程执行的操作,响应客户端的请求 20 public void run(){ 21 InputStream is=null; 22 InputStreamReader isr=null; 23 BufferedReader br=null; 24 OutputStream os=null; 25 PrintWriter pw=null; 26 try { 27 //获取输入流,并读取客户端信息 28 is = socket.getInputStream(); 29 isr = new InputStreamReader(is); 30 br = new BufferedReader(isr); 31 String info=null; 32 while((info=br.readLine())!=null){//循环读取客户端的信息 33 System.out.println("我是服务器,客户端说:"+info); 34 } 35 socket.shutdownInput();//关闭输入流 36 //获取输出流,响应客户端的请求 37 os = socket.getOutputStream(); 38 pw = new PrintWriter(os); 39 pw.write("欢迎!"); 40 pw.flush();//调用flush()方法将缓冲输出 41 } catch (IOException e) { 42 // TODO Auto-generated catch block 43 e.printStackTrace(); 44 }finally{ 45 //关闭资源 46 try { 47 if(pw!=null) 48 pw.close(); 49 if(os!=null) 50 os.close(); 51 if(br!=null) 52 br.close(); 53 if(isr!=null) 54 isr.close(); 55 if(is!=null) 56 is.close(); 57 if(socket!=null) 58 socket.close(); 59 } catch (IOException e) { 60 e.printStackTrace(); 61 } 62 } 63 } 64 65 }

//---------------------------------------------------------------------------单独连接
 1 package com.peng.Socket_TCP;
 2 
 3 import java.io.BufferedReader;
 4 import java.io.IOException;
 5 import java.io.InputStream;
 6 import java.io.InputStreamReader;
 7 import java.io.OutputStream;
 8 import java.io.PrintWriter;
 9 import java.net.Socket;
10 import java.net.UnknownHostException;
11 /*
12  * 基于TCP的Socket通信:服务器和客户端----客户端类
13  *         1、创建Socket类,设置连接服务器的主机和端口
14  *         2、输出数据到服务器(注意关闭socket的输出流)
15  *         3、输入服务器的响应(注意关闭socket的输入流)
16  *         4、关闭资源
17  * 
18  *
19  */
20 public class SingleConnect_client {
21 
22     public static void main(String[] args) {
23 
24         try {
25             //1.创建客户端Socket,指定服务器地址和端口
26             Socket socket=new Socket("192.168.2.100", 8884);
27             //2.获取输出流,向服务器端发送信息
28             OutputStream os=socket.getOutputStream();//字节输出流
29             PrintWriter pw=new PrintWriter(os);//将输出流包装为打印流
30             pw.write("呵呵呵呵");
31             pw.flush();
32             socket.shutdownOutput();//关闭输出流
33             //3.获取输入流,并读取服务器端的响应信息
34             InputStream is=socket.getInputStream();
35             BufferedReader br=new BufferedReader(new InputStreamReader(is));
36             String info=null;
37             while((info=br.readLine())!=null){
38                 System.out.println("我是客户端,服务器说:"+info);
39             }
40             //4.关闭资源
41             br.close();
42             is.close();
43             pw.close();
44             os.close();
45             socket.close();
46         } catch (UnknownHostException e) {
47             e.printStackTrace();
48         } catch (IOException e) {
49             e.printStackTrace();
50         }
51     }
52 
53 }
View Code

//---------------------------------------------------------------------------

 1 package com.peng.Socket_TCP;
 2 
 3 import java.io.IOException;
 4 import java.net.InetAddress;
 5 import java.net.ServerSocket;
 6 import java.net.Socket;
 7 /*
 8  * 基于TCP的Socket通信:服务器和客户端----服务器类
 9  *         1、创建ServerSocket类,设置连接服务器的端口
10  *         2、用ServerSocket对象的accept()方法创建socket对象
11  *             3、输入客户端的数据(注意关闭socket的输入流):socket.shutdownInput();
12  *             4、输出响应到客户端(注意关闭socket的输出流):socket.shutdownOutput();
13  *         5、关闭资源
14  * @author Lenovo
15  *
16  *
17  *线程中就是端口指定,但是用循环来接受客户端的数据
18  *
19  *获取客户端的IP用的是        socket.getInetAddress()
20  *获取Socket通信的输入流:    socket.getInputStream()     并包装
21  *获取Socket通信的输出流:    socket.getOutputStream()    并包装
22  *
23  *
24  */
25 
26 public class SingleConnect_server {
27     public static void main(String[] args) {
28         try {
29             //1.创建一个服务器端Socket,即ServerSocket,指定绑定的端口,并监听此端口
30             ServerSocket serverSocket=new ServerSocket(8888);
31             Socket socket=null;
32             
33             //记录客户端的数量
34             int count=0;
35             System.out.println("***服务器即将启动,等待客户端的连接***");
36             //循环监听等待客户端的连接
37             while(true){
38                 //调用accept()方法开始监听,等待客户端的连接
39                 socket=serverSocket.accept();
40                 //创建一个新的线程
41                 ServerThread serverThread=new ServerThread(socket);
42                 //启动线程
43                 serverThread.start();
44                 
45                 count++;//统计客户端的数量
46                 System.out.println("客户端的数量:"+count);
47                 InetAddress address=socket.getInetAddress();
48                 System.out.println("当前客户端的IP:"+address.getHostAddress());
49             }
50         } catch (IOException e) {
51             e.printStackTrace();
52         }
53     }
54 
55 }
View Code
原文地址:https://www.cnblogs.com/wqsix/p/6774355.html