多线程+socket实现简单server和client操作唯一文本

package server;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;

public class MarsServer extends Thread {
	public static final int PORT = 8765;
	public static final String book = "autobiography.txt";
	private Socket socket;
	private BufferedReader in;
	private PrintWriter out;
	private static PrintWriter fileOut;

	public MarsServer(Socket s) throws IOException {
		socket = s;
		InputStream socketInput = socket.getInputStream();
		InputStreamReader socketReader = new InputStreamReader(socketInput);
		in = new BufferedReader(socketReader);

		OutputStream socketOutput = socket.getOutputStream();
		OutputStreamWriter socketWriter = new OutputStreamWriter(socketOutput);
		BufferedWriter bufferedWriter = new BufferedWriter(socketWriter);
		out = new PrintWriter(bufferedWriter, true);

		start();
	}

	public void run() {
		while (true) {
			try {
				String str = in.readLine();
				if (str.equals("q"))
					break;
					fileOut.println(str);
				out.println("server send:" + str);
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		System.out.println("closing socket...");
		
		try {
			socket.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	public static void main(String[] args) throws IOException {
		ServerSocket s = new ServerSocket(PORT);
		System.out.println("[server]");
		System.out.println("Started: " + s);
		System.out.println("Server Started");
		try {
			FileWriter fileWriter = new FileWriter(book);
			BufferedWriter bufferedFileWriter = new BufferedWriter(fileWriter);
			fileOut = new PrintWriter(bufferedFileWriter, true);
			while (true) {
				Socket socket = s.accept();
				try {
					new MarsServer(socket);
				} catch (IOException e) {
					socket.close();
				}
			}
		} finally {
			fileOut.close();
			
			System.out.println("closing ServerSocket...");
			s.close();
		}
	}
}

 

package client;

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.Socket;

import server.MarsServer;

public class MarsClient extends Thread {
	private Socket socket;
	private BufferedReader in;
	private PrintWriter out;
	private String id;

	public MarsClient(InetAddress addr, String id) throws IOException {
		this.id = id;
		System.out.println("Making client " + id);
		socket = new Socket(addr, MarsServer.PORT);
		in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
		out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())), true);
		start();
	}

	public void run() {
		try {
			for (int i = 0; i < 100; i++) {
				out.println("Client " + id + ": " + i);
				String str = in.readLine();
				System.out.println(str);
			}
			out.println("q");
		} catch (IOException e) {
			System.out.println(e);
		}
	}

	static final int MAX_THREADS = 2;

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

		InetAddress addr = InetAddress.getByName(null);
		System.out.println("[client]");
		System.out.println("addr = " + addr);

		new MarsClient(addr, 1 + "");
		//Thread.sleep(100);
		new MarsClient(addr, 2 + "");

	}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值