您的位置:首页 > 其它

一个比较成熟的Socket实例

2012-06-09 23:43 295 查看
废话不多说...直接看代码

服务器端...

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: