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

java socket客户端与服务器联系的问题
客户端代码
public static void main(String[] args)
{
//读取命令行数据。
Socket socket;
try{
socket = new Socket(InetAddress.getLocalHost(),6767);
System.out.println(InetAddress.getLocalHost().toString());
BufferedReader in=new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintWriter out=new PrintWriter(socket.getOutputStream());
out.write(args[0] + "," + args[1]);
out.flush();
System.out.println(1);
System.out.print(in.readLine());
socket.close();
}catch(IOException ex)
{
}
}

服务器端代码
//读取命令行数据。
ServerSocket socket;
Socket client;
try{
socket = new ServerSocket(6767);
client = socket.accept();
System.out.println(client.getInetAddress().toString());
BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream()));
PrintWriter out = new PrintWriter(client.getOutputStream());
System.out.println("1");
while(true)
{
String str = in.readLine();
System.out.println("begin receive....." + str);
out.println("has receive....." + str);
out.flush();
if (str == "end")
break;
}
client.close();
}catch(IOException ex)
{
}

出现的结果:
客户端输出
  本机电脑名称/ip地址
  1
  服务器端输出
  /ip地址
  1

问题:
  1、为什么我的客户端和服务器端连不上呢?
  2、java的可以去连接c#的socket服务器吗?
谢谢


------解决方案--------------------
你在客户端没有建立输入缓冲池 ,所以你在键盘输入的信息显示不出来也发不过去
try{ 
socket = new Socket(InetAddress.getLocalHost(),6767); 
String s=InetAddress.getLocalHost().toString();
System.out.println(s); 
BufferedReader in=new BufferedReader(new InputStreamReader(socket.getInputStream())); 
PrintWriter out=new PrintWriter(socket.getOutputStream(),true); 
BufferedReader line = new BufferedReader(new InputStreamReader(System.in));
String s=line.readLine();
while(true){
out.println(s);
out.flush();
if(s.equals("end"))break;
s=line.readLine();
continue;
}
out.write(s); 
out.flush(); 
System.out.println(1); 
System.out.print(in.readLine()); 
socket.close(); 
}catch(IOException ex) { } 
还有out.write(args[0] + "," + args[1]); 有溢出,所以改为:
out.println(InetAddress.getLocalHost().toString()); 
我也是刚学,不知道能不能连c#的服务器
------解决方案--------------------
当然可以。。他们全部实现的tcp/ip协议,跟具体的哪种语言实现无关。
------解决方案--------------------
你这个程序都block住了。。根本不可能结束。。
------解决方案--------------------
你的客户端是怎么请求的?输出后,BufferedReader in=new BufferedReader(new InputStreamReader(socket.getInputStream())); 
还有最后将异常输出也打印出来

------解决方案--------------------
那你在服务器端实现多线程,每次accpt获得socket以后,使用另外一个线程来与客户端连接,然后客户端结束,你的线程也结束。。你服务端主线程不断在accept,分配新线程。或者用nio。