黑马程序员技术交流社区

标题: [求助]关于网络编程的IO [打印本页]

作者: 蒋映辉    时间: 2012-5-8 09:36
标题: [求助]关于网络编程的IO
我写了一个服务端和一个客户端,从客户端向服务端发送数据,但是为什么服务端就只能接收一行呢?
代码:
  1. package com.net;

  2. import java.io.*;
  3. import java.net.*;

  4. public class Test1 {
  5.         public static void main(String[] args) throws IOException{
  6.                
  7.                         ServerSocket ss=new ServerSocket(30000);
  8.                 while(true){
  9.                         Socket s=ss.accept();
  10.                         InputStream is=s.getInputStream();
  11.                         InputStreamReader ws=new InputStreamReader(is);
  12.                         String line=null;
  13.                         BufferedReader br=new BufferedReader(ws);
  14.                        
  15.                         while((line=br.readLine())!=null){
  16.                                
  17.                                
  18.                                 System.out.print(new String(line));
  19.                         }
  20.                
  21.                        
  22.                 }
  23.                
  24.                
  25.                
  26.         }
  27.        

  28. }
复制代码
  1. package com.net;

  2. import java.io.BufferedReader;
  3. import java.io.IOException;
  4. import java.io.InputStream;
  5. import java.io.InputStreamReader;
  6. import java.io.OutputStream;
  7. import java.io.PrintStream;
  8. import java.io.Reader;
  9. import java.net.Socket;
  10. import java.net.UnknownHostException;

  11. public class Test2 {
  12.         public static void main(String[] args) throws UnknownHostException, IOException{
  13.                
  14.                 Socket s=new Socket("127.0.0.1",30000);
  15.                
  16.                
  17.                 OutputStream os=s.getOutputStream();
  18.                 PrintStream ps=new PrintStream(os);
  19.                 String line=null;
  20.                
  21.                 BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
  22.                
  23.                
  24.                 while((line=br.readLine())!=null){
  25.                 ps.println(line);
  26.                
  27.                 }
  28.                
  29.                
  30.                
  31.                
  32.                
  33.                
  34.         }

  35. }
复制代码

作者: 周素强    时间: 2012-5-8 10:25
TCP传输步骤:
SocketServerSocket
1,建立客户端和服务器端
    客户端:通过Socket类创建对象,并利用构造函数传入服务端主机名(ip)和端口,也可通过相关方法进行设置。
    服务端:通过ServerSocket类创建对象,利用构造函数设置服务端的端口,也可通过相关方法进行设置。
2,建立连接后,通过Socket中的IO流进行数据的传输
    客户端:建立客户端对象后通过getOutputStream()方法获取一个IO流对象,通过write()read()方法与服务端进行传输数据。
    服务端:通过ServerSocket对象的accept方法获取连接过来的客户端(Socket)对象(没有连接就会等,所以这个方法是堵塞的),通过获取到的客户端对象来获取此对象的IO流(接收或发送)数据并对数据进行处理。(通过获取到的客户端对象,就可以用其此对象的相关方法来获取客户端的相关信息如IP)
3,关闭Socket
注:客户端和服务器端是两个独立的应用程序 。

作者: 谭景宾    时间: 2012-5-8 10:32
while((line=br.readLine())!=null){ //因为客户端一次就读取到一行

                ps.println(line);    //读取完一行就发送,所以服务端收到的就是一行
                }


作者: 徐然    时间: 2012-5-8 12:58
你的服务端打印结果你没有让它换行啊

package com.net;

import java.io.*;
import java.net.*;

public class Test1 {
        public static void main(String[] args) throws IOException{
               
                        ServerSocket ss=new ServerSocket(30000);
                while(true){
                        Socket s=ss.accept();
                        InputStream is=s.getInputStream();
                        InputStreamReader ws=new InputStreamReader(is);
                        String line=null;
                        BufferedReader br=new BufferedReader(ws);
                        
                        while((line=br.readLine())!=null){
                                
                                
                                System.out.println(new String(line));
                                这里你没有加ln,它打印的自然是一行
                        }
               
                        
                }
               
               
               
        }
        

}
作者: 蒋映辉    时间: 2012-5-8 14:43
嘎嘎  问题已经解决。。。
作者: 周峰    时间: 2012-5-8 14:45
你没有定义缓冲区  ,  你顶一个 buf  bayt 类型的试试@!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2