当前位置: 代码迷 >> J2SE >> 关于JAVA网络编程中的多线程,求指教!解决方案
  详细解决方案

关于JAVA网络编程中的多线程,求指教!解决方案

热度:120   发布时间:2016-04-24 01:42:24.0
关于JAVA网络编程中的多线程,求指教!
我要完成的功能是这样的:首先开启服务器,等待客户端连接。当客户端连接成功后,就进行数据处理。在这数据处理的同时,服务器还在监听状态,保持和客户端的连接!在这时候要完全的吧接收和发送分开,也就是说,客户端和服务器端都可以随时的进行数据的收发!我已经可以完成接收和发送了,但是还没有很好的去利用线程!请看一下我的具体代码:
开启服务器的类:
public class Start {
  // private StringBuffer receive=null;
public static void main(String[] args) throws IOException{
Server server=new Server();
server.start();//启动服务器
StringBuffer receive=server.getReceive();
System.out.println("接收到的所有值为:"+receive.toString());
}
}
服务器开启,已经数据处理的类:
public class Server {
private ServerSocket serverSocket;
private Socket socket;
private StringBuffer receive;
/**
* 启动服务器
* @throws IOException 
*/
public void start() throws IOException{
System.out.println("启动服务器") ;
serverSocket();//启动监听状态serverSocket()
//while(true){
Socket socket = serverSocket.accept();//得到客户端连接,程序进入到阻塞状态
SSocket ssocket=new SSocket(socket);
new Thread(ssocket).start();//执行线程
//}
}
/**
* 启动监听程序
* @throws IOException 
*/
public void serverSocket() throws IOException{
System.out.println("服务器开始监听......");
this.serverSocket =new ServerSocket(8088) ;// 服务器在8888端口上监听
}
/**
* 得到客户端连接socket()
* @throws IOException 
*/
public void socket() throws IOException{
System.out.println("主程序等待客户端连接......");
this.socket = serverSocket.accept();
}
/**
* 传人接收到的数据存到,返回接收到的数据
*/
public void setReceive(StringBuffer receiv){
this.receive=receiv;
}
/**
* 将接收到的数据返回
*/
public StringBuffer getReceive(){
return this.receive;
}
/**
* 发送数据,返回发送是否成功
* @throws IOException 
 
public boolean sendServer(String send) throws IOException{

return true;
}*/
}
线程类:
/**
 * 线程类
 */
public class SSocket extends Thread{
private StringBuffer receive=new StringBuffer();//接收
Socket socket=null;
public SSocket(Socket socket){
this.socket=socket;

/**
* 定义线程的run方法
*/
public void run(){
System.out.println("线程等待客户端连接......");
Server server=new Server();//创建Server类的对象
try {
PrintWriter output=new PrintWriter(socket.getOutputStream(),true );//输出流,发送数据到客户端
output.flush();//刷新数据
BufferedReader buf = new BufferedReader(
new InputStreamReader(
socket.getInputStream()));//输入流,接收客户端的数据
boolean bContinue =true;
while(bContinue){
String reseiveSTR=buf.readLine();
System.out.println("接收到的值为:"+reseiveSTR);
if(reseiveSTR.equals("exit")){
System.out.println("接收到的所有值为:"+receive.toString());
server.setReceive(receive);//将接收到的数据传入到Server类
buf.close();
output.close();
bContinue =false;
System.out.println("关闭线程");
this.socket.close();
yield(); //向其他线程退让运行权
}
this.receive.append(reseiveSTR);
}

} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}



------解决方案--------------------
呵呵正培训java呢。。我今天正好乱写了个。。仅作参考很垃圾的。。
Java code
/*服务器端代码*/import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.IOException;import java.io.InputStreamReader;import java.io.OutputStreamWriter;import java.net.InetAddress;import java.net.ServerSocket;import java.net.Socket;public class BasicServer extends Thread{    static ServerSocket ss;    static Socket s;    static BufferedWriter out;    static BufferedReader in;    static BufferedReader br;    static boolean f = true;    public void run(){        String str;        while(f){            try {                str = br.readLine();                out.write(str+"\n");                out.flush();            } catch (IOException e) {                e.printStackTrace();            }        }    }    public static void main(String[]args){        try {            ss  = new ServerSocket(8838);            Socket s = ss.accept();            out  = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));            in = new BufferedReader(new InputStreamReader(s.getInputStream()));            br = new BufferedReader(new InputStreamReader(System.in));            new BasicServer().start();            while(true){                String str2 = in.readLine();                System.out.println(InetAddress.getLocalHost()+"说:"+str2);                if(str2.equals("end"))                break;            }            BasicServer.f = false;            br.close();            in.close();            out.close();            s.close();        } catch (IOException e) {            e.printStackTrace();        }            }}/*客户端代码*/import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.IOException;import java.io.InputStreamReader;import java.io.OutputStreamWriter;import java.net.InetAddress;import java.net.Socket;public class BasicClient extends Thread{        static Socket sc;    static BufferedWriter out;    static BufferedReader in;    static BufferedReader br;    static boolean f = true;    public void run(){        String str;        while(f){            try {                str = br.readLine();                out.write(str+"\n");                out.flush();            } catch (IOException e) {                e.printStackTrace();            }        }    }        public static void main(String[]args) throws IOException{        sc = new Socket(InetAddress.getLocalHost(),8838);        in = new BufferedReader(new InputStreamReader(sc.getInputStream()));        out = new BufferedWriter(new OutputStreamWriter(sc.getOutputStream()));        br = new BufferedReader(new InputStreamReader(System.in));        new BasicClient().start();        while(true){            String str2 = in.readLine();            System.out.println(InetAddress.getLocalHost()+"说:"+str2);            if(str2.equals("end"))            break;        }                BasicClient.f = false;        out.close();        in.close();        br.close();        sc.close();    }}我也新学java的。。可以来新建群里共同学习交流208779755
  相关解决方案