我写了一个客户端,一个服务器类,运行正常,但是服务器端读不到客户端发送的消息。。客户端
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.Socket;
import java.net.UnknownHostException;public class Client {
public static void main(String[] args){
Socket socket;
try {
socket = new Socket("127.0.0.1",8000);
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
BufferedWriter out = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
while(true){
System.out.print("messge:");
String s = bf.readLine();
out.write(s);
out.flush();
}
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
}服务器端import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;public class Server {
public static void main(String[] args){
try {
ServerSocket server = new ServerSocket(8000);
Socket socket = server.accept();
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String s = null;
System.out.println("ss");
s = in.readLine();
while(true){
s = in.readLine();
System.out.println(s);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.Socket;
import java.net.UnknownHostException;public class Client {
public static void main(String[] args){
Socket socket;
try {
socket = new Socket("127.0.0.1",8000);
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
BufferedWriter out = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
while(true){
System.out.print("messge:");
String s = bf.readLine();
out.write(s);
out.flush();
}
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
}服务器端import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;public class Server {
public static void main(String[] args){
try {
ServerSocket server = new ServerSocket(8000);
Socket socket = server.accept();
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String s = null;
System.out.println("ss");
s = in.readLine();
while(true){
s = in.readLine();
System.out.println(s);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
System.out.println("ss");
s = in.readLine();
修改成:
System.out.println("ss");
public static void main(String[] args){
try {
ServerSocket server = new ServerSocket(8000);
Socket socket = server.accept();
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String s = null;
System.out.println("ss");
s = in.readLine(); //如果客户端就发过来一行信息,这儿该可以打印信息了
while(true){ s = in.readLine(); //如果客户端只发过来一行信息,这句话会堵塞你的服务器端
System.out.println(s);
}
} catch (Exception e) {e.printStackTrace();
}
}
}
while(true)中的" s = in.readLine(); "即可
首先说句你的程序只是想调试下socket的编程,想尝试下通信的刺激(这个理解,我也是这样过来的),但是你的写法很不和常理,
解释下你的为什么服务器没解释到消息,(其实是接受到了,只是 没接到回车符号,就没out.println出来);
看你的程序:
[code]
服务器代码片段:
while(true){
s = in.readLine(); //这里是读吧,直到读到以个回车吧
//11标示 s=s+"\n"; 加个回车符号不就好了?是的,
System.out.println(s);
}
客户端片段:
while(true){
System.out.print("messge:");
String s = bf.readLine(); //这里是读,要用户输入吧,但是回车符不会独到s里面去吧,其实是这样的。
out.write(s); //这里就是吧s发出去吧,恩对 好问题来来了,就是,你没发送回车符,那你看看上面的服务器段的代码,你//是要读到回车符(in.readLine())吧 ,才把把他在服务器段输出吧。但是你没发送回车符啊?那服务器就一直读啊,所以 就//没打印出来,所以你就一位服务器没读到客户发的消息。 这个问题解决的办法是加上 11 标示 出代码
out.flush();
}
这样代码大概就是:
服务器短:
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket; class Server {
public static void main(String[] args){
try {
System.out.println("Server wait client connect to this:");
ServerSocket server = new ServerSocket(8000);
Socket socket = server.accept();
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String s = null;
// int s;
System.out.println("Server:");
while((s = in.readLine())!=null){
//s = in.readLine();
System.out.println(s);
}
}catch(Exception e) {
e.printStackTrace();
}
}
} 客户段:
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.Socket;
import java.net.UnknownHostException;
import java.io.*;class Client {
public static void main(String[] args){
Socket socket;
try {
socket = new Socket("127.0.0.1",8000);
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
// PrintWriter out = new PrintWriter(socket.getOutputStream(),true);
BufferedWriter out = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
System.out.print("Client:");
while(true){
String s = bf.readLine();
//out.println(s);
s=s+"\n";
out.write(s);
System.out.println("is???"+s);
// out.println();
out.flush();
Thread.sleep(1000);
}
}catch(Exception e) {
e.printStackTrace();
}
}
}
//我只是稍微该了下你的代码,不好意,你自己吧关键几个错误哦的地方换为正确就可以了,上面的是调试了的我调试了的(不想误//人子弟^_^),其实想下如果用PringWriter的话就可以用out。println()去做了,不用再加个回车符了,看下面的代码我写的:import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.Socket;
import java.net.UnknownHostException;
import java.io.*;class Client {
public static void main(String[] args){
Socket socket;
try {
socket = new Socket("127.0.0.1",8000);
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintWriter out = new PrintWriter(socket.getOutputStream(),true);
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
System.out.print("Client:");
while(true){
String s = bf.readLine();
out.println(s);
out.flush();
Thread.sleep(1000);
}
}catch(Exception e) {
e.printStackTrace();
}
}
} import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket; class Server {
public static void main(String[] args){
try {
System.out.println("Server wait client connect to this:");
ServerSocket server = new ServerSocket(8000);
Socket socket = server.accept();
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String s = null;
System.out.println("Server:");
while((s = in.readLine())!=null){
System.out.println(s);
}
}catch(Exception e) {
e.printStackTrace();
}
}
} [/code]
首先说句你的程序只是想调试下socket的编程,想尝试下通信的刺激(这个理解,我也是这样过来的),但是你的写法很不和常理,
解释下你的为什么服务器没解释到消息,(其实是接受到了,只是 没接到回车符号,就没out.println出来);
看你的程序:服务器代码片段:
while(true){
s = in.readLine(); //这里是读吧,直到读到以个回车吧
//11标示 s=s+"\n"; 加个回车符号不就好了?是的,
System.out.println(s);
}
客户端片段:
while(true){
System.out.print("messge:");
String s = bf.readLine(); //这里是读,要用户输入吧,但是回车符不会独到s里面去吧,其实是这样的。
out.write(s); //这里就是吧s发出去吧,恩对 好问题来来了,就是,你没发送回车符,那你看看上面的服务器段的代码,你//是要读到回车符(in.readLine())吧 ,才把把他在服务器段输出吧。但是你没发送回车符啊?那服务器就一直读啊,所以 就//没打印出来,所以你就一位服务器没读到客户发的消息。 这个问题解决的办法是加上 11 标示 出代码
out.flush();
}
这样代码大概就是:
服务器短:
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket; class Server {
public static void main(String[] args){
try {
System.out.println("Server wait client connect to this:");
ServerSocket server = new ServerSocket(8000);
Socket socket = server.accept();
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String s = null;
// int s;
System.out.println("Server:");
while((s = in.readLine())!=null){
//s = in.readLine();
System.out.println(s);
}
}catch(Exception e) {
e.printStackTrace();
}
}
} 客户段:
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.Socket;
import java.net.UnknownHostException;
import java.io.*;class Client {
public static void main(String[] args){
Socket socket;
try {
socket = new Socket("127.0.0.1",8000);
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
// PrintWriter out = new PrintWriter(socket.getOutputStream(),true);
BufferedWriter out = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
System.out.print("Client:");
while(true){
String s = bf.readLine();
//out.println(s);
s=s+"\n";
out.write(s);
System.out.println("is???"+s);
// out.println();
out.flush();
Thread.sleep(1000);
}
}catch(Exception e) {
e.printStackTrace();
}
}
}
//我只是稍微该了下你的代码,不好意,你自己吧关键几个错误哦的地方换为正确就可以了,上面的是调试了的我调试了的(不想误//人子弟^_^),其实想下如果用PringWriter的话就可以用out。println()去做了,不用再加个回车符了,看下面的代码我写的:import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.Socket;
import java.net.UnknownHostException;
import java.io.*;class Client {
public static void main(String[] args){
Socket socket;
try {
socket = new Socket("127.0.0.1",8000);
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintWriter out = new PrintWriter(socket.getOutputStream(),true);
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
System.out.print("Client:");
while(true){
String s = bf.readLine();
out.println(s);
out.flush();
Thread.sleep(1000);
}
}catch(Exception e) {
e.printStackTrace();
}
}
} import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket; class Server {
public static void main(String[] args){
try {
System.out.println("Server wait client connect to this:");
ServerSocket server = new ServerSocket(8000);
Socket socket = server.accept();
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String s = null;
System.out.println("Server:");
while((s = in.readLine())!=null){
System.out.println(s);
}
}catch(Exception e) {
e.printStackTrace();
}
}
}
怎么现在不支持代码编辑器了在是是
[code]
import java.lang.String;
[/code]