[置顶] 一个比较成熟的Socket实例

废话不多说...直接看代码

服务器端...

Server.java

package test;  
import java.net.ServerSocket;  
import java.net.Socket;
public class Server {
	public static ServerSocket ss;
    int i=10000;
	public Server(){
    	try {
    		System.out.println("监听端口:"+i);
        	ss = new ServerSocket(i);
        	Socket socket = ss.accept();
        	Socket_List.setSocket(i, socket);
            System.out.println("在端口       "+i+"  有新连接:"+Socket_List.getSocket(i).getRemoteSocketAddress());
            new Thread(new getMessage(i)).start();
		} catch (Exception e) {
			System.out.println("连接客户端异常"+e.getMessage());
		}
    }
    public static void main(String[] args) {
         new Server();
    }
}
Socket_list.java

package test;
import java.net.Socket;
import java.util.HashMap;
import java.util.Map;

public class Socket_List {
	private static Map<Integer, Socket> map= new HashMap<Integer, Socket>();
	private static Socket_List list;
	public static Socket_List getThis()
	{
		if(list==null)
			list= new Socket_List();
		return list;
	}
	public static Socket getSocket(int i)
	{
		return map.get(i);
	}
	public static void setSocket(int i,Socket socket)
	{
		map.put(i, socket);
	}
}

getMessage.java

package test;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;

public class getMessage implements Runnable{
	private int i=0;
	public static String getMessages(int id) throws Exception
	{
		BufferedReader reader=new BufferedReader(new InputStreamReader(Socket_List.getSocket(id).getInputStream()));
		return reader.readLine();
	}
	public static void sendMessages(int id,String message) throws Exception
	{
		PrintWriter send=new PrintWriter(Socket_List.getSocket(id).getOutputStream());
		send.println(message);
		send.flush();
	}
	public getMessage(int i) {
		this.i=i;
	}
	@Override
	public void run() {
		try {
			while(true)
			{
				String Message=getMessages(i);
				System.out.println("来自"+Socket_List.getSocket(i).getRemoteSocketAddress()+"的信息:"+Message);
				sendMessages(i, Message);
				System.out.println("向客户端发送信息:"+Message);
			}
		} catch (Exception e) {
			try {
				System.out.println("客户端"+Socket_List.getSocket(i).getRemoteSocketAddress()+"断开连接~!");
				Socket_List.getSocket(i).close();
				Server.ss.close();
				new Server();
			} catch (Exception e1) {
				System.out.println("未能正常关闭Socket!~");
			}
		}
	}
}

客户端

Client.java

package test;
import java.net.Socket;
public class Client {
	int i=10000;
    public Client(){
    	try {
    		Socket client=new Socket("127.0.0.1",i);
    		System.out.println("已连接"+i);
	    	new Thread(new ClientgetMessage(client)).start();
    	} catch (Exception e) {
			System.out.println("未能连接到服务器"+e.getMessage());
		}
    }
    public static void main(String[] args) {  
		new Client();
    }  
}  


ClientgetMessage.java

package test;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;

public class ClientgetMessage implements Runnable{
	private Socket socket;
	public ClientgetMessage(Socket socket) {
		this.socket=socket;
	}
	public void run() {
		new Thread(new getMessages(socket)).start();
		new Thread(new sendMessages(socket)).start();
	}
}
class getMessages implements Runnable
{
	private Socket socket;
	getMessages(Socket socket)
	{
		this.socket=socket;
	}
	public void run() {
		try {
			while(true)
			{
				BufferedReader reader=new BufferedReader(new InputStreamReader(socket.getInputStream()));
				String Message=reader.readLine();
				System.out.println("来自"+socket.getRemoteSocketAddress()+"的信息:"+Message);
			}
		} catch (Exception e) {
			try {
				System.out.println("服务器"+socket.getRemoteSocketAddress()+"断开连接~!");
				socket.close();
				new Client();
				System.exit(0);
			} catch (Exception e1) {
				System.out.println("未能正常关闭Socket!~");
			}
		}
	}
	
}
class sendMessages implements Runnable
{
	private Socket socket;
	sendMessages(Socket socket)
	{
		this.socket=socket;
	}
	public void run() {
		try {
			while(true)
			{
				PrintWriter send=new PrintWriter(socket.getOutputStream());
				BufferedReader reader=new BufferedReader(new InputStreamReader(System.in));
				send.println(reader.readLine());
				send.flush();
			}
		} catch (Exception e) {
			System.out.println("发送消息失败");
		}
	}
	
}

-----------------------------------程序员 闫帆原创---------------------------------------

转载请注明原创人信息  程序员 闫帆yanfanvip



posted @ 2012-06-09 23:43  程序员闫帆  阅读(235)  评论(0编辑  收藏  举报