Java Socket 编程学习(2)

Java Socket 多线程

服务端代码:

package yang.socket.tcp;

import java.io.BufferedReader;

import java.io.BufferedWriter;

import java.io.IOException;

import java.io.InputStreamReader;

import java.io.OutputStreamWriter;

import java.io.PrintWriter;

import java.net.ServerSocket;

import java.net.Socket;


class ServerThreadCode extends Thread{

	// 客户端的socket,用来接受客户端的socket

	public Socket clientSocket;
	
	public BufferedReader sockin;

	public PrintWriter sockout;

	public ServerThreadCode(Socket socket) throws IOException{

		this.clientSocket = socket;
		
		System.out.println("Message from: " + clientSocket);
		
	}

	// 线程执行的主体函数

	public void run(){

		try {
			sockin = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));

			sockout = new PrintWriter(new BufferedWriter(new OutputStreamWriter(clientSocket.getOutputStream())),true);
			
			while (true) {

				String str = sockin.readLine();

				System.out.println("Server reveived message: " + str);
				
				sockout.println(str + "  Has received");  

				if (str.equals("end")) {

					break;

				}
			}
		}

		catch (IOException e) {
			
			e.printStackTrace();
			
		}
		finally{
			
			try {
				
				System.out.println("closing the server socket!" + clientSocket);
				
				clientSocket.close();
				
				sockin.close();
				
				sockout.close();
				
			} catch (IOException e) {
				
				e.printStackTrace();
				
			}
			
		}
	}

}

public class ThreadServer {

	public static void main(String[] args) throws IOException {

		int port = 3333;

		ServerSocket server=new ServerSocket(port);  
		
		System.out.println("服务器正在运行。。。。");//一直运行不会停止
		
		while(true){   
			  
			ServerThreadCode serverSample = new ServerThreadCode(server.accept());
			
			serverSample.start();
			
		}
		
	}
}

客户端代码:

package yang.socket.tcp;


import java.io.BufferedReader;

import java.io.BufferedWriter;

import java.io.IOException;

import java.io.InputStreamReader;

import java.io.OutputStreamWriter;

import java.io.PrintWriter;

import java.net.InetAddress;

import java.net.UnknownHostException;

import java.net.Socket;

class ClientThreadCode extends Thread{

    public Socket socket;

    public static int cnt = 0;

    private int clientId = cnt++;

    public BufferedReader in;

    public PrintWriter out;
    
    public ClientThreadCode(InetAddress addr, int port){

        try {

            socket = new Socket(addr, port);
            
            System.out.println("Client socket is build" + socket);
            
            in = new BufferedReader(new InputStreamReader(socket.getInputStream()));

            out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())), true);
            
            start();
            
        } catch (IOException e1) {

            e1.printStackTrace();
        }
    }

    // 线程主体方法

    public void run() {

        try {

            out.println("Hello Server, this is client " + clientId);

            out.println("end");

            String str = in.readLine();

            System.out.println(str);

        }

        catch (IOException e) {

            e.printStackTrace();

        }

        finally {

            try {
                
                System.out.println("Client " + clientId + " is closed!");

                socket.close();
                
                in.close();
                
                out.close();

            } catch (IOException e) {

                e.printStackTrace();

            }
        }
    }
}


public class TnreadClient {

    /**
     * @param args
     * @throws UnknownHostException
     */
    public static void main(String[] args) throws UnknownHostException {
        // TODO Auto-generated method stub

        int i = 0;
        
        int port = 3333;

        InetAddress addr =    InetAddress.getByName("localhost");

        for (i = 0; i < 3; i++){

            new ClientThreadCode(addr, port);

        }
    }

}


测试场景:

服务器端:

服务器正在运行。。。。
Message from: Socket[addr=/127.0.0.1,port=55104,localport=3333]
Server reveived message: Hello Server, this is client 0
Server reveived message: end
closing the server socket!Socket[addr=/127.0.0.1,port=55104,localport=3333]
Message from: Socket[addr=/127.0.0.1,port=55105,localport=3333]
Server reveived message: Hello Server, this is client 1
Server reveived message: end
closing the server socket!Socket[addr=/127.0.0.1,port=55105,localport=3333]
Message from: Socket[addr=/127.0.0.1,port=55106,localport=3333]
Server reveived message: Hello Server, this is client 2
Server reveived message: end
closing the server socket!Socket[addr=/127.0.0.1,port=55106,localport=3333]

客户端:
Client socket is buildSocket[addr=localhost/127.0.0.1,port=3333,localport=55104]
Hello Server, this is client 0  Has received
Client 0 is closed!
Client socket is buildSocket[addr=localhost/127.0.0.1,port=3333,localport=55105]
Hello Server, this is client 1  Has received
Client 1 is closed!
Client socket is buildSocket[addr=localhost/127.0.0.1,port=3333,localport=55106]
Hello Server, this is client 2  Has received
Client 2 is closed!



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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值