1. 程式人生 > >Socket網路程式設計:基於TCP多執行緒通訊

Socket網路程式設計:基於TCP多執行緒通訊

第一步:編寫啟動服務端的執行緒類

package socket;

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;

public class ServerThread extends Thread {
	Socket socket = null;
	public ServerThread(Socket socket) {
		this.socket = socket;
	}
	
	
	@Override
	public void run() {
		InputStream is =null;
		InputStreamReader isr=null;
		BufferedReader reader=null;
		String response=null;
		OutputStream out=null;
		PrintWriter pw =null;
		try {
			is = socket.getInputStream();
			isr = new InputStreamReader(is);
			reader = new BufferedReader(isr,1024); 
			String info=null;
			while((info=reader.readLine())!=null){
				System.out.println(info);
			}
			
			socket.shutdownInput();
			
			response = "我是服務端,歡迎向服務端請求";
			out = socket.getOutputStream();
			pw= new PrintWriter(out);
			pw.write(response);
			pw.flush();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally{
			try {
				if(pw!=null)
				pw.close();
				if(out!=null)
				out.close();
				if(reader!=null)
				reader.close();
				if(isr!=null)
				isr.close();
				if(is!=null)
				is.close();
				if(socket!=null)
				socket.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		
	}
}
第二步:程式設計服務端
package socket;

import java.io.BufferedReader;
import java.io.IOException;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;

public class Servers {
	public static void main(String[] args) throws IOException {
		ServerSocket serverSocket = new ServerSocket(8888);
		System.out.println("****************服務端啟動******************");
		int count =0;
		while(true){
			Socket socket = serverSocket.accept();
			ServerThread serverThread = new ServerThread(socket);
			count ++;
			
			serverThread.start();
			
			System.out.println(InetAddress.getLocalHost()+"***********");
		}
		/*
		InputStream is = socket.getInputStream();
		InputStreamReader isr = new InputStreamReader(is);
		BufferedReader reader = new BufferedReader(isr,1024); 
		String info=null;
		while((info=reader.readLine())!=null){
			System.out.println(info);
		}
		
		socket.shutdownInput();
		
		String response = "我是服務端,歡迎向服務端請求";
		OutputStream out =  socket.getOutputStream();
		PrintWriter pw = new PrintWriter(out);
		pw.write(response);
		pw.flush();
		pw.close();
		out.close();
		reader.close();
		isr.close();
		is.close();
		socket.close();
		serverSocket.close();*/
	}
}

最後:程式設計客戶端
package socket;

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;
import java.net.UnknownHostException;

public class Clients {
	public static void main(String[] args) throws UnknownHostException, IOException {
		Socket socket = new Socket("localhost", 8888);
		
		OutputStream out = socket.getOutputStream();
		PrintWriter pw = new PrintWriter(out);
		
		pw.write("我是客戶端2*********fsdfsdgds******");
		pw.flush();
		
		socket.shutdownOutput();
		
		InputStream is = socket.getInputStream();
		InputStreamReader  isr = new InputStreamReader(is);
		
		BufferedReader br = new BufferedReader(isr);
		String info =null;
		while((info=br.readLine())!=null){
			System.out.println(info);
		}
		
		br.close();
		isr.close();
		is.close();
		pw.close();
		out.close();
		socket.close();
	}
}