你好,非常感谢您能阅读本贴。程序目的:首先服务端向客户端发送一句话,客户端接收。然后客户端发送一句话,服务端接收。下面附上代码:
package com.baidu.Excerise;import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.net.ServerSocket;
import java.net.Socket;public class TestServer { /**
* @ SocketServer的编写【服务端的编写】
*/
public static void main(String[] args) { TestServer ts = new TestServer(); ts.server(); } public void server() { try { ServerSocket serverSocket = new ServerSocket(88); while (true) { Socket s = serverSocket.accept(); BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(s
.getOutputStream())); bw.write("欢迎光临!!!");
BufferedReader br = new BufferedReader(new InputStreamReader(s
.getInputStream()));
System.out.println(br.readLine());
bw.flush();
bw.close();
br.close();
s.close();
} } catch (IOException e) { e.printStackTrace();
} }}
==================================================================================
package com.baidu.Excerise;import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.Socket;
import java.net.UnknownHostException;public class TestClient { /**
* Socket的编写【客户端】
*/
public static void main(String[] args) { TestClient tc = new TestClient(); tc.client();
} public void client() { try { Socket s = new Socket("localhost", 88);
BufferedReader br = new BufferedReader(new InputStreamReader(s
.getInputStream()));
System.out.println(br.readLine());
BufferedWriter bufferedWriter =new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
bufferedWriter.write("我是李明。");
bufferedWriter.flush();
bufferedWriter.close(); br.close();
s.close(); } catch (UnknownHostException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace();
} }}
==========================================================================================服务端一运行就处于等待状态,客户端一运行同样,两者都处于死等状态。我以前也练习过这种例子,知识用的包装类是DataOutputStream和DataInputStream,代码类似可以实现相互通信。并且针对这个问题我也借助过搜索引擎查找我。找到的大多是比这个问题更复杂。我的理解是:服务端和客户端都运行到了接收对方信息的语句,所以死住了。曾试过用用Thread.sleep(1000)解决,但是没有效果,希望你能帮助我解决这个困扰我的问题。非常感谢。
package com.baidu.Excerise;import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.net.ServerSocket;
import java.net.Socket;public class TestServer { /**
* @ SocketServer的编写【服务端的编写】
*/
public static void main(String[] args) { TestServer ts = new TestServer(); ts.server(); } public void server() { try { ServerSocket serverSocket = new ServerSocket(88); while (true) { Socket s = serverSocket.accept(); BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(s
.getOutputStream())); bw.write("欢迎光临!!!");
BufferedReader br = new BufferedReader(new InputStreamReader(s
.getInputStream()));
System.out.println(br.readLine());
bw.flush();
bw.close();
br.close();
s.close();
} } catch (IOException e) { e.printStackTrace();
} }}
==================================================================================
package com.baidu.Excerise;import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.Socket;
import java.net.UnknownHostException;public class TestClient { /**
* Socket的编写【客户端】
*/
public static void main(String[] args) { TestClient tc = new TestClient(); tc.client();
} public void client() { try { Socket s = new Socket("localhost", 88);
BufferedReader br = new BufferedReader(new InputStreamReader(s
.getInputStream()));
System.out.println(br.readLine());
BufferedWriter bufferedWriter =new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
bufferedWriter.write("我是李明。");
bufferedWriter.flush();
bufferedWriter.close(); br.close();
s.close(); } catch (UnknownHostException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace();
} }}
==========================================================================================服务端一运行就处于等待状态,客户端一运行同样,两者都处于死等状态。我以前也练习过这种例子,知识用的包装类是DataOutputStream和DataInputStream,代码类似可以实现相互通信。并且针对这个问题我也借助过搜索引擎查找我。找到的大多是比这个问题更复杂。我的理解是:服务端和客户端都运行到了接收对方信息的语句,所以死住了。曾试过用用Thread.sleep(1000)解决,但是没有效果,希望你能帮助我解决这个困扰我的问题。非常感谢。
解决方案 »
- 求高手帮助看看下面代码
- jimi问题:No source image set.
- 用java实现进制问题
- java中空指针异常问题
- c++中调用java中嵌套对象的类的问题
- 请大家推荐几本好的关于Java的书
- 大家好,我在myeclipse下开发JSP的数据库网站,,那JDBC的数据库驱动程序文件放在哪里啊,我不会,初用,感谢
- 我的applet怎么不能在浏览器里显示?
- 如何设置java应用程序的风格,如java风格,和windows风格!
- 正则表达式在有类似匹配组的情况下如何尽可能多的匹配
- 在synchronized块中声明变量!!
- java swt中如何把table选中的行数copy到excel?
Socket s = serverSocket.accept(); BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(s
.getOutputStream())); bw.write("欢迎光临!!!"); BufferedReader br = new BufferedReader(new InputStreamReader(s
.getInputStream())); 你是想做成多线程么?
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.Writer;
import java.net.ServerSocket;
import java.net.Socket;public class TestServer { /**
* @ SocketServer的编写【服务端的编写】
*/
public static void main(String[] args) { TestServer ts = new TestServer(); ts.server(); } public void server() { try { ServerSocket serverSocket = new ServerSocket(4000);
Socket s = serverSocket.accept(); BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
PrintWriter pw = new PrintWriter(bw,true);
pw.println("欢迎光临!!!"); BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
System.out.println(br.readLine()); bw.flush(); bw.close(); br.close();
}
catch (IOException e) { e.printStackTrace();
} }}
客户端:
package com.baidu.Excerise;import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;public class TestClient { /**
* Socket的编写【客户端】
*/
public static void main(String[] args) { TestClient tc = new TestClient(); tc.client();
} public void client() { try { Socket s = new Socket("localhost", 4000);
System.out.println("clientsocket = " + s);
BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream())); System.out.println(br.readLine()); BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
PrintWriter pw = new PrintWriter(bufferedWriter,true); pw.println("我是李明。"); bufferedWriter.flush(); bufferedWriter.close(); br.close(); s.close(); }
catch (UnknownHostException e) { e.printStackTrace(); }
catch (IOException e) { e.printStackTrace();
} }}
非常感谢您的帮助--11楼,效果我看你的代码我知道,我曾经也写过这种测试,换个包装流PrintWriter和PrintReader这样是可以实现的,另外包装流换成DataInputStream和DataOutputStream也是可以的。那么问题就在于BufferedReader和BufferedWriter与其他流在这上面有什么关系,为什么不能处理呢?
导致接收方,总是读不了一行(没有末尾标识符)而陷入等待。另一个是在使用BufferedWriter的write方法后,不调用flush方法。
造成数据一直堆积在发送方的缓冲区中,迟迟没有推给接收方,接收方陷入等待。楼主的代码没有格式,我没有看。但是,我说的两个注意事项,楼主参考一下。
或许有帮助。
非常感谢您的帮助,代码是我从Eclipse直接拷贝的所以没有再排版,对于浏览者包括您造成的阅读不便我深感抱歉,我保证我下次提问帖代码一定注意格式。说问题吧,16楼所说的这两种可能性我再次手动尝试修改了代码,可是还没解决,希望您能帮我看看。我真的好像知道问题出在哪里?另外代码直接拷在Eclipse中用源代码菜单下的格式可以调整好格式的。希望能得到帮助。我的qq:373136249 这个帖子我会留意的。