我初学到socket编程了,编一个server与client点对点说话的小程序,但是每次client端说的话能传到server端,server端说的话始终却传不到client端,代码没看见明显错误,在NetBeans上运行。因为这个问题,我昨晚没吃饭,直到断电都睡不着,早上起来重新运行,还是不行,我想打人……菜鸟学起来为什么就这么困难,这本身是个很简单的例子,我下面给出代码,希望好心的人帮我看看,我一定会铭感在心,谢谢你们了,我直到程序员时间很宝贵,实在解决不了我才发帖求助你们的,再次谢谢你们了,我一整天在线等答案。
server端的代码:
import java.io.*;
import java.net.*;public class TalkServer { public static void main(String[] args) { try{ServerSocket ss=null;
try{
ss=new ServerSocket(8888);
}catch(Exception e){
System.out.println("can not listen to!"+e);
System.exit(-1);
}
Socket socket=null;
try{
socket=ss.accept();
}catch(Exception e){
System.out.println("err"+e);
} String line;
BufferedReader brGet=new BufferedReader(new InputStreamReader(
socket.getInputStream()));
PrintWriter pw=new PrintWriter(socket.getOutputStream());
BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); line=br.readLine();
while(!line.equals("bye")){
pw.println(line);
pw.flush();
System.out.println("Server: "+line);
System.out.println("Client: "+brGet.readLine());
line=br.readLine();
}
brGet.close();
pw.close();
ss.close();
socket.close(); }catch(IOException e){
System.out.println("出错! "+e.getMessage());
System.exit(-1);
}
}}
-------------------------------------------------
client端代码:import java.io.*;
import java.net.*;public class TalkClient { public static void main(String[] args) {
try{
Socket socket=new Socket("172.28.4.102",8888);
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
PrintWriter pw=new PrintWriter(socket.getOutputStream());
BufferedReader brGet=new BufferedReader(new InputStreamReader(socket.getInputStream())); String readline;
readline=br.readLine();
while(!readline.equals("bye")){
pw.println(readline);
pw.flush();
System.out.println("Client: "+readline);
System.out.println("Server: "+brGet.readLine());
readline=br.readLine();
} pw.close();
brGet.close();
socket.close(); }catch(Exception e){
System.out.println("出错!"+e.getMessage()); }
}}
server端的代码:
import java.io.*;
import java.net.*;public class TalkServer { public static void main(String[] args) { try{ServerSocket ss=null;
try{
ss=new ServerSocket(8888);
}catch(Exception e){
System.out.println("can not listen to!"+e);
System.exit(-1);
}
Socket socket=null;
try{
socket=ss.accept();
}catch(Exception e){
System.out.println("err"+e);
} String line;
BufferedReader brGet=new BufferedReader(new InputStreamReader(
socket.getInputStream()));
PrintWriter pw=new PrintWriter(socket.getOutputStream());
BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); line=br.readLine();
while(!line.equals("bye")){
pw.println(line);
pw.flush();
System.out.println("Server: "+line);
System.out.println("Client: "+brGet.readLine());
line=br.readLine();
}
brGet.close();
pw.close();
ss.close();
socket.close(); }catch(IOException e){
System.out.println("出错! "+e.getMessage());
System.exit(-1);
}
}}
-------------------------------------------------
client端代码:import java.io.*;
import java.net.*;public class TalkClient { public static void main(String[] args) {
try{
Socket socket=new Socket("172.28.4.102",8888);
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
PrintWriter pw=new PrintWriter(socket.getOutputStream());
BufferedReader brGet=new BufferedReader(new InputStreamReader(socket.getInputStream())); String readline;
readline=br.readLine();
while(!readline.equals("bye")){
pw.println(readline);
pw.flush();
System.out.println("Client: "+readline);
System.out.println("Server: "+brGet.readLine());
readline=br.readLine();
} pw.close();
brGet.close();
socket.close(); }catch(Exception e){
System.out.println("出错!"+e.getMessage()); }
}}
而是server必须先读
String line 这行上必须先写System.out.println("Client: "+brGet.readLine());然后必须client端先说话
可以参考下列的例子
http://blog.csdn.net/hzhxxx/archive/2009/12/09/4970196.aspx 下列描述了JNSP(java network service platform)服务的部署和功能,如有不明白之处,自己查看源代码,我无力和没有太多时间回答太多的问题.
源代码一起提供,可以随意修改,发布,并商业化,但请保留作者的信息.为了技术的进步,请注意共享成就. 目前已经发布于:http://download.csdn.net/source/1885332;http://hzhxxx.download.csdn.net/
如果查看后有技术问题探讨和建议的,欢迎致电致信联系.系统架构设计和实现有如下特点:
A. 采用 Accept-Connect 通讯模型,能统一管理系统中使用的所有 Socket 资源;
B. 系统支持通信和协议分离的实现原则,支持自定义协议解析模块;通信负责数据收发,协议负责数据鉴别,两者配合实现通信和协议的和谐工作;
C. 灵活支持业务处理功能重定义,分级支持慢业务和快业务的不同业务处理线程;
D. 丰富灵活的配置参数,能满足高扩展性;
E. 配合业务处理和通信模型,能异步的管理所有的交互步骤;
F. 分布式服务设计和部署,实现动态(热拔插)的增加和较少业务服务器,减少乃至拒绝单点服务;