日期:2014-05-20  浏览次数:20717 次

服务器与客户端之间通信问题
在服务器中通过命令行向客服端发送数据,在客户端通过命令行向服务器发送数据,结果只能从客户端向服务器发送,当在客服端输入第二个数据时候就无法发送到服务器,求指教
代码如下:
package com.chinasofti.socket;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;
/**
 * 服务器端
 */
public class ServerClass {

public static void main(String[] args) throws IOException {
ServerSocket cilent = new ServerSocket(8888);
Socket sc = cilent.accept();



InputStream is = sc.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
System.out.println(br.readLine());

OutputStream os = sc.getOutputStream();
OutputStreamWriter osw = new OutputStreamWriter(os);
BufferedWriter bw = new BufferedWriter(osw);

InputStreamReader ir = new InputStreamReader(System.in); 
BufferedReader bfr = new BufferedReader(ir);
String s = bfr.readLine();
while(s!=null){
bw.write(s+"\r\n");
bw.flush();
s = bfr.readLine();
}
bw.close();
}
}




import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.Socket;
import java.net.UnknownHostException;
/**
 * 客户端
 */
public class CilentClass {

public static void main(String[] args) throws UnknownHostException, IOException {
Socket server = new Socket("127.0.0.1", 8888);
InputStream is = server.getInputStream();
OutputStream os = server.getOutputStream();

OutputStreamWriter osw = new OutputStreamWriter(os);
BufferedWriter bw = new BufferedWriter(osw);

InputStreamReader ir = new InputStreamReader(System.in); 
BufferedReader bfr = new BufferedReader(ir);
String s = bfr.readLine();

while(s!=null){
bw.write(s+"\r\n");
bw.flush();
s = bfr.readLine();
}

InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
System.out.println(br.readLine());
bw.close();
}
}

------解决方案--------------------
代码没看。只是 通过你的描述我能感觉出来你的问题。。
只能客户端向服务端那是因为你只在服务器端创建了socket监听.
而且你的监听到之后不是线程形式运行的的,而是一次性的,所以监听到一次之后方法运行结束。就不在继续监听了。。
一般的做法是监听到客户端发送的请求后,new一个新的线程来完成这次的客户端请求。。
------解决方案--------------------
你这都是接受一次就结束了。你得去循环监听。。不要收了一次就结束掉才行。
------解决方案--------------------
你这样好像在写应用服务的基础,其实还需要考虑到并发数和线程数,以及每次新线程的默认设置。
------解决方案--------------------
应该在服务端采用多线程来处理
------解决方案--------------------