刚学socket,问几个简单的问题。1。下面的程序我可以在一台机器上运行吗?就是都放在eclipse里的同一个项目下,运行???????、我为什么运行不了?2  ServerSocket(5678);这个是随便写的端口号吗?3 先运行clinet,输入,然后运行server??????????服务方:
import java.io.*;
import java.net.*;public class MyServer {
 public static void main(String[] args) throws IOException{
  ServerSocket server=new ServerSocket(5678);
  Socket client=server.accept();
BufferedReader in=new BufferedReader(new InputStreamReader(client.getInputStream()));
PrintWriter out=new PrintWriter(client.getOutputStream());
while(true){
 String str=in.readLine();
System.out.println(str);
 out.println("has receive....");
 out.flush();
 if(str.equals("end"))
 break;
}
client.close();
 } 
}这个程序的主要目的在于服务器不断接收客户机所写入的信息只到.客户机发送"End"字符串就退出程序.并且服务器也会做出"Receive"为回应.告知客户机已接收到消息.客户机代码:
import java.net.*;
import java.io.*;public class Client{
 static Socket server;
 
 public static void main(String[] args)throws Exception{
  server=new Socket(InetAddress.getLocalHost(),5678);
  BufferedReader in=new BufferedReader(new InputStreamReader(server.getInputStream()));
  PrintWriter out=new PrintWriter(server.getOutputStream());
  BufferedReader wt=new BufferedReader(new InputStreamReader(System.in));
  
  while(true){
   String str=wt.readLine();
   out.println(str);
   out.flush();
   if(str.equals("end")){
    break;
   }
   System.out.println(in.readLine());
  }
  server.close();
 }
}客户机代码则是接受客户键盘输入,并把该信息输出,然后输出"End"用来做退出标识.

解决方案 »

  1.   

    我用两个机器运行了,服务器接受到了,可是有错误sdfsd
    java.net.SocketException: Software caused connection abort: recv failed
    at java.net.SocketInputStream.socketRead0(Native Method)
    at java.net.SocketInputStream.read(SocketInputStream.java:129)
    at sun.nio.cs.StreamDecoder$CharsetSD.readBytes(StreamDecoder.java:408)
    at sun.nio.cs.StreamDecoder$CharsetSD.implRead(StreamDecoder.java:450)
    at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:182)
    at java.io.InputStreamReader.read(InputStreamReader.java:167)
    at java.io.BufferedReader.fill(BufferedReader.java:136)
    at java.io.BufferedReader.readLine(BufferedReader.java:299)
    at java.io.BufferedReader.readLine(BufferedReader.java:362)
    at MyServer.main(MyServer.java:12)
    Exception in thread "main"
      

  2.   

    因为没有数据流,随意在readLine就出错了。
      

  3.   

    你把客户端的close()这一行拿掉看一下,可能是客户端关闭了,而服务器端还开着
      

  4.   

    1.可以在一台机上运行,我运行时出错,正在想解决方法
    2  ServerSocket(5678);这个是随便写的端口号吗?是的3 先运行clinet,输入,然后运行server??????????先运行server,然后运行clinet,输入
      

  5.   

    clientimport java.net.*;
    import java.io.*;public class Client{
     // Socket server;
     
     public static void main(String[] args)throws Exception{
      Socket server=new Socket("127.0.0.1",1111);
      BufferedReader in=new BufferedReader(new InputStreamReader(server.getInputStream()));
      OutputStream os =server.getOutputStream();
      OutputStreamWriter osw = new OutputStreamWriter(os);
      PrintWriter pw = new PrintWriter(osw,true);
     // PrintWriter out=new PrintWriter(new OutputStreamWriter(server.getOutputStream()),true);
      BufferedReader wt=new BufferedReader(new InputStreamReader(System.in));
      
      while(true){
       String str=wt.readLine();
       pw.println(str);
     //  out.flush();
       if(str.equals("end")){
        break;
       }
       System.out.println(in.readLine());
      } }
    }serverimport java.io.*;
    import java.net.*;public class MyServer {
     public static void main(String[] args) throws Exception{
      ServerSocket server=new ServerSocket(1111);
      Socket client=server.accept();
      System.out.println("服务器");
    //  InputStream is = client.getInputStream();
    //  InputStreamReader isr = new InputStreamReader(is);
    //  BufferedReader br = new BufferedReader(isr);
    BufferedReader in=new BufferedReader(new InputStreamReader(client.getInputStream()));
    PrintWriter out=new PrintWriter(new OutputStreamWriter(client.getOutputStream()),true);
    while(true){
     String str=in.readLine();
    System.out.println(str);
     out.println("has receive....");
    // out.flush();
     if(str.equals("end"))
     break;
    } } 
    }总结一下,我将端口号改成1111,8888都行,就是5678不行
    你可以试一下
    现在在我机上通过对于第二个问题的回答我收回,我也是新手,哈哈
      

  6.   

    哦,好像是这样的,问一下先运行server 为什么要输入那?我server 里并没有要输入东西啊
      

  7.   

    先运行server,那个是随便输的端口号
      

  8.   

    低价转让JAVA/Oracle系列的培训资料,同时转让相关经典书籍,详细介绍如下,后面有联系方式,需要的请速联系。(一律超低价转让!!!一次全购价格绝对让你心动!!!)
    一、JAVA基础培训
    1.孙鑫Java无难事(共108集  SWF格式)
    2.张孝祥Java就业培训(共56集  RM/RMVB格式)
    3.翁凯Java语言视频培训(共30讲  CSF格式)
    二、JAVA进阶培训
    1.吉林大学远程JSP培训(共32讲 AVI格式)
    2.西安电子科技大学JSP在线课程(共35讲  AVI格式)
    3.JSP数据库系统开发培训( ISO格式 内含电子书及相关源代码)
    4.刘晓涛JAVA UML核心基础(共6集  RM/RMVB格式 )
    5.J2EE专题系列讲座之Struts(共5讲  AVI格式 )
    6.赛迪网校J2EE软件工程师培训(J2EE基础13集  高级17集  案例7集)
    7.J2EE Web程序开发(共38集)
    8.天峰培训J2EE快速进阶培训视频(共33讲  AVI格式)
    三、JAVA实战项目培训录像
    1.北京尚学堂科技_马士兵老师_项目实战手把手java视频教程-坦克大战
    2.北京尚学堂科技_马士兵老师_项目实战手把手j2se视频教程-Chat
    3.北京尚学堂科技_马士兵老师_项目实战手把手BBS教程
    四、数据库方面
    1.Oracle 9i DBA中文视频远程班培训录像(共64集  AVI格式)
    *1Z0-007 Introduction to Oracle9i SQL 
    *1Z0-031 Oracle9i DBA Fundamentals I 
    *1Z0-032 Oracle9i DBA Fundamentals II 
    *1Z0-033 Oracle9i Performance Tuning
        另附全套PPT培训讲稿。
    2.中科院Oracle 10G 数据库培训录像(共18集 rmvb格式)联系方式:
    QQ:421130479
    MSN:[email protected]
    E-mail:[email protected]