62,614
社区成员
发帖
与我相关
我的任务
分享
import java.net.*;
import java.io.*;
import java.util.*;
public class Server{
private ServerSocket ss;
private Map<String,Socket> map = new HashMap<String,Socket>();
private BufferedReader in;
private PrintWriter out;
public Server() {
try {
ss = new ServerSocket(6000);
//开启一个发送线程
SSendThread sst = new SSendThread(this);
new Thread(sst).start();
while(true) {
Socket socket = ss.accept();
ServerProxy sp = new ServerProxy();
sp.acceptClient(this,socket);
}
}catch (IOException e) {
out.println("wrong");
}
}
public boolean isQuit(){
return false;
}
public void quit(boolean b){
}
public void addClient(String name,Socket socket){
if(getSocket(name) == null){
map.put(name,socket);
}
}
public Socket getSocket(String name){
return (Socket)map.get(name);
}
public static void main(String[] args) {
new Server();
}
}
/**
* 服务器代理,用于处理一个客户端的请求。一个客户端对应一个代理
*/
class ServerProxy{
private SSReceiveThread rt;
public void acceptClient(Server server,Socket socket)
{
rt = new SSReceiveThread(server,socket);
new Thread(rt).start();
}
}
class SSReceiveThread implements Runnable{
private Socket socket;
private Server server;
public SSReceiveThread(Server server,Socket socket){
this.server = server;
this.socket = socket;
}
public void run(){
String RemoteIP = socket.getInetAddress().getHostAddress();
String RemotePort = ":"+socket.getLocalPort();
BufferedReader in;
while(true){
if(server.isQuit()){return;}
try {
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
char[] buffer = new char[1024*1024*5];
String lineStr = "";
/*while((lineStr = in.readLine()) != null){
System.out.println(lineStr);
}*/
int len = in.read(buffer,0,buffer.length);
String context = new String(buffer,0,len);
String name = parseContext(context);
server.addClient(name,socket);
System.out.print(context);
}catch(IOException e) {
System.out.println("SSReceiveThread Wrong");
e.printStackTrace();
return;
}
}
}
public String parseContext(String context){
return context.substring(0,context.indexOf(":"));
}
}
class SSendThread implements Runnable{
private Server server;
public SSendThread(Server server){
this.server = server;
}
public void run(){
while(true){
try {
BufferedReader line = new BufferedReader(new InputStreamReader(System.in));
String respMsg = line.readLine();
if(respMsg.equals("quit")){
server.quit(true);
return;
}
sendRespMsg(respMsg);
}catch(IOException e) {
System.out.println("SSendThread Wrong");
}
}
}
public void sendRespMsg(String respMsg){
String newMsg = respMsg;
if(respMsg.indexOf("a:") == -1 && respMsg.indexOf("b:") == -1){
newMsg = "a:";
newMsg += respMsg;
}
String name = newMsg.substring(0,respMsg.indexOf(":"));
Socket s = server.getSocket(name);
try {
PrintWriter out;
out = new PrintWriter(s.getOutputStream(),true);
out.println(newMsg);
}catch(IOException e){
System.out.println("SSendThread Wrong");
}
}
}
import java.io.*;
import java.net.*;
public class Client {
Socket socket;
BufferedReader in;
PrintWriter out;
boolean isQuit;
public Client() {
try {
System.out.println("Try to Connect to 127.0.0.1:23");
socket = new Socket("10.144.205.98",23);
}catch(Exception e){
System.out.println("wrong");
}
isQuit = false;
}
public void send(){
SendThread sd = new SendThread(this);
new Thread(sd).start();
}
public void server(){
ServerThread st = new ServerThread(this);
new Thread(st).start();
}
public void over(){
try{
out.close();
in.close();
socket.close();
}catch(Exception e) {
System.out.println("Wrong");
}
}
public Socket getSocket(){return socket;}
public boolean isQuit() {return isQuit;}
public void quit(boolean b){isQuit = b;}
public static void main(String[] args) throws Exception{
Client c1 = new Client();
c1.server();
Thread.sleep(1000);
c1.send();
}
}
class ServerThread implements Runnable{
Client cl;
public ServerThread(Client cl){this.cl = cl;}
public void run(){
BufferedReader in;
Socket socket = cl.getSocket();
while(true){
if(cl.isQuit()){return;}
try {
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
char[] buffer = new char[1024*1024*5];
String lineStr = "";
/*while((lineStr = in.readLine()) != null){
System.out.println(lineStr);
}*/
int len = in.read(buffer,0,buffer.length);
System.out.print(new String(buffer,0,len));
}catch(IOException e) {
System.out.println("ServerThread Wrong");
e.printStackTrace();
return;
}
}
}
}
class SendThread implements Runnable{
Client cl;
public SendThread(Client cl){this.cl = cl;}
public void run(){
PrintWriter out;
Socket socket = cl.getSocket();
while(true){
try {
out = new PrintWriter(socket.getOutputStream(),true);
BufferedReader line = new BufferedReader(new InputStreamReader(System.in));
String tmp = line.readLine();
if(tmp.equals("quit")){
cl.quit(true);
return;
}
out.println(tmp);
}catch(IOException e) {
System.out.println("SendThread Wrong");
}
}
}
}