TCP socket服务器端和客户端通信

一、建立服务端线程类SocketThread


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.Socket;

/**
 * Socket多线程处理类 用来处理服务端接收到的客户端请求(处理Socket对象)
 */
public class SocketThread extends Thread {

    private Socket socket;

    public SocketThread(Socket socket) {
        this.socket = socket;
    }

    public void run() {
        // 根据输入输出流和客户端连接
        try {
            InputStream inputStream = socket.getInputStream();
            // 得到一个输入流,接收客户端传递的信息
            InputStreamReader inputStreamReader = new InputStreamReader(
                    inputStream); 
            
            OutputStream outputStream = socket.getOutputStream();// 获取一个输出流,向服务 端发送信息
            PrintWriter printWriter = new PrintWriter(outputStream);// 将输出流包装成打印流
 
            char[] cbuf = new char[20];
            int len;
            String info = ""; 
            while((len = inputStreamReader.read(cbuf)) != -1){
                String str = new String(cbuf, 0, len);
                info = str;
                System.out.println("已接收到客户端连接");
                System.out.println("服务端接收到客户端信息:" + info + ",当前客户端ip为:"
                        + socket.getInetAddress().getHostAddress()+ ",当前客户端端口号为:"
                        + socket.getPort()); 
                printWriter.print("你好,服务端已接收到您的信息");
                printWriter.flush();
            } 
            socket.shutdownOutput();// 关闭输出流

            // 关闭相对应的资源
            inputStreamReader.close();
            inputStream.close();
            printWriter.close();
            outputStream.close();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

}

二、建立服务端Server


  import java.io.IOException;
  import java.net.ServerSocket;
  import java.net.Socket;
  
  public class Server {
  
      /**
       * Socket服务端
       */
     public static void main(String[] args) {
         try {
             ServerSocket serverSocket = new ServerSocket(8080);
             System.out.println("服务端已启动,等待客户端连接..");
 
             while (true) {
                 Socket socket = serverSocket.accept();// 侦听并接受到此套接字的连接,返回一个Socket对象
                 SocketThread socketThread = new SocketThread(socket);
                 socketThread.start();
             }
 
         } catch (IOException e) {
             e.printStackTrace();
         }
     }
 
 }

三、建立客户端线程ClientSocketThread


import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.Socket; 

 
public class ClientSocketThread extends Thread {

    private Socket socket;

    public ClientSocketThread(Socket socket) {
        this.socket = socket;
    }

    public void run() {
        // 根据输入输出流和客户端连接
        try {
             //根据输入输出流和服务端连接 
               
             Thread.sleep(10000);
             OutputStream outputStream=socket.getOutputStream();//获取一个输出流,向服务端发送信息
             PrintWriter printWriter=new PrintWriter(outputStream);//将输出流包装成打印流
             printWriter.print("服务端你好,我是客户1");
             printWriter.flush();
             socket.shutdownOutput();//关闭输出流
             
             
             InputStream inputStream=socket.getInputStream();//获取一个输入流,接收服务端的信息
             InputStreamReader inputStreamReader = new InputStreamReader(inputStream);//包装成字符流,提高效率
             
                char[] cbuf = new char[20];
                int len;
                String info = "";
                System.out.println("客户端接收服务端发送信息:" ); 
                while ((len = inputStreamReader.read(cbuf)) != -1) {
                    String str = new String(cbuf, 0, len);
                    info = str; 
                    System.out.println(info ); 
                    printWriter.flush();
                }
               
             //关闭相对应的资源
             inputStreamReader.close();
             inputStream.close();
             printWriter.close();
             outputStream.close();
             socket.close();        
        } catch (InterruptedException ex) {
            ex.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

}

四、建立客户端Client1


  import java.io.IOException; 
  import java.net.Socket;
  import java.net.UnknownHostException;
  
 
 public class Client1 {
 
     /**
      * Socket客户端
      */
     public static void main(String[] args) {
         try {
             //创建Socket对象
             Socket socket=new Socket("192.168.100.38",8899);

             ClientSocketThread socketThread = new ClientSocketThread(socket);
             socketThread.start();   
 
         } catch (UnknownHostException e) {
             e.printStackTrace();
         } catch (IOException e) {
             e.printStackTrace();
         }
 
     }
 
 }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值