socket编程的小例子、socket聊天程序

刚刚参加工作不久、算是一个菜鸟吧、、下面是自己写的一个基于socket的聊天程序、多多提意见和建议、、

client、单词拼错了、大家不就用提醒了、

server、服务器端

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.HashMap;
import java.util.Map;

public class Server {
	public static Map map=new HashMap();
	public static Integer msgCount=0;

	public void doService() throws Exception {
		ServerSocket ss = new ServerSocket(8088);
		System.out.println("服务器已经启动.....");
		while (true) {
			Socket socket = ss.accept();
			System.out.println("一个客户端连接了...");
			try {
				new ReadThead(socket).start();
				new WriteThead(socket).start();
			} catch (Exception e) {
				// TODO: handle exception
			}
		}
	}

	public static void main(String[] args) throws Exception {
		new Server().doService();
	}
}

class ReadThead extends Thread {

	private Socket socket;

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

	@Override
	public void run() {
		// TODO Auto-generated method stub

		BufferedReader br = null;
		String ipString = null;
		try {

			synchronized (socket) {
				br = new BufferedReader(new InputStreamReader(socket
						.getInputStream()));
				ipString = socket.getLocalAddress().getHostAddress();
			}
			while (true) {
				String msg = "";

				if ((msg = br.readLine()) != null) {
					msg = ipString + "说:" + msg;
					System.out.println(msg);
					synchronized (Server.map) {
						Server.map.put(Server.msgCount++, msg);

					}
				}
			}

		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}
	}

}

class WriteThead extends Thread {
	private Integer msgCount=0;
	private Socket socket;

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

	public void run() {
		PrintWriter pw = null;
		OutputStream outputStream = null;
		try {
			synchronized (socket) {
				outputStream = socket.getOutputStream();
				pw = new PrintWriter(outputStream);

			}
			String msg = null;
			while (true) {
				synchronized (Server.map) {
					if (msgCount < Server.map.size()) {
						msg = Server.map.get(msgCount).toString();
						pw.println(msg);
						pw.flush();
						outputStream.flush();
						msgCount++;
					}
				}

			}

		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();

		}
	}
}

 client

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.Scanner;


public class Clinet {
	public static void main(String [] args)throws Exception{
		Socket socket=new Socket("192.168.0.125",8088);
		new ReadThread(socket).start();
		new WriteThread(socket).start();
		System.out.println("客户端已经启动");
	}

}
class ReadThread extends Thread{
	private Socket socket;
	public ReadThread(Socket socket){
		this.socket= socket;
	}
	public void run(){
		

		  BufferedReader br = null;
		  String ipString=null;
		try {
			
			synchronized (socket) {
				 br =	new BufferedReader(new InputStreamReader(socket.getInputStream()));
				ipString=socket.getLocalAddress().getHostAddress();
			}
			while(true){
				String msg="";
				if((msg=br.readLine())!=null){
					System.out.println(msg);
				}
			}
			

		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}
	}
	
}

class WriteThread extends Thread{
	private Socket socket;
	public WriteThread(Socket socket){
		this.socket= socket;
	}
	public void run(){
		PrintWriter pw=null;
	    OutputStream outputStream=null;
		try {
			synchronized (socket) {
				outputStream=socket.getOutputStream();
				pw =new PrintWriter(outputStream);

				
			}
			String msg=null;
			while(true){
				Scanner scanner=new Scanner(System.in);
				msg=scanner.next();
				pw.println(msg);
				pw.flush();
				outputStream.flush();
			}

		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}
	}
	
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值