黑马程序员技术交流社区
标题: [求助]关于网络编程的IO [打印本页]
作者: 蒋映辉 时间: 2012-5-8 09:36
标题: [求助]关于网络编程的IO
我写了一个服务端和一个客户端,从客户端向服务端发送数据,但是为什么服务端就只能接收一行呢?
代码:- 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.print(new String(line));
- }
-
-
- }
-
-
-
- }
-
- }
复制代码- package com.net;
- import java.io.BufferedReader;
- import java.io.IOException;
- import java.io.InputStream;
- import java.io.InputStreamReader;
- import java.io.OutputStream;
- import java.io.PrintStream;
- import java.io.Reader;
- import java.net.Socket;
- import java.net.UnknownHostException;
- public class Test2 {
- public static void main(String[] args) throws UnknownHostException, IOException{
-
- Socket s=new Socket("127.0.0.1",30000);
-
-
- OutputStream os=s.getOutputStream();
- PrintStream ps=new PrintStream(os);
- String line=null;
-
- BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
-
-
- while((line=br.readLine())!=null){
- ps.println(line);
-
- }
-
-
-
-
-
-
- }
- }
复制代码
作者: 周素强 时间: 2012-5-8 10:25
TCP传输步骤:
Socket和ServerSocket
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 |