int len = in.read(buf); //buf是char[]类型,len是实际读到的长度
谢谢kingfish的帮助,我将程序改为: Socket sock = new Socket("×.×.×.×", 9002); BufferedWriter wr = new BufferedWriter(new OutputStreamWriter(sock.getOutputStream())); wr.write("test string"); wr.flush();BufferedReader in = new BufferedReader(new InputStreamReader(sock.getInputStream())); char[] received = new char[2000]; System.out.println("before read"); int len = br.read(received); System.out.println("the len is: " + len);
第一次执行时,程序能正常打印出“the len is: 145”,但第二次及以后执行时只打印出“"before read"”,而不能打印出“the len is: ”,即执行到“int len = br.read(received);”这一步时又僵死在这里,读不到数据。 请教这是什么原因,该怎么解决,谢谢指导!
Socket sock = new Socket("×.×.×.×", 9002);
BufferedWriter wr = new BufferedWriter(new OutputStreamWriter(sock.getOutputStream()));
wr.write("test string");
wr.flush();BufferedReader in = new BufferedReader(new InputStreamReader(sock.getInputStream()));
char[] received = new char[2000];
System.out.println("before read");
int len = br.read(received);
System.out.println("the len is: " + len);
第一次执行时,程序能正常打印出“the len is: 145”,但第二次及以后执行时只打印出“"before read"”,而不能打印出“the len is: ”,即执行到“int len = br.read(received);”这一步时又僵死在这里,读不到数据。
请教这是什么原因,该怎么解决,谢谢指导!
System.out.println("Started: " + s);
String str1 = "";
try
{
Socket socket = s.accept();
try
{
System.out.println("Connection accepted:" + socket);
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())),true);
while(true)
{
str1 = in.readLine();
if(str1.equals("END"))break;
System.out.println("Echoing:" + str1);
out.println(str1);
}
}
finally
{
System.out.println("Closing...");
socket.close();
}
}
finally
{
s.close();
}
一段完整的代码
您看看
或许对您有帮助
这本书
很不错
否则如果第一次他while (in.readLine() != null)此时你的发送方还没有发数据过来,他就直接做过了这一步,再也不会做while体内的语句了
还有,注意socket的服务是问答试的!
服务器端实现代码:import java.io.*;import java.net.*; public class FileServer{ public static void main(String[] args)throws Exception{ //创建文件流用来读取文件中的数据 File file=new File("lishengjie.jpg"); FileInputStream fos=new FileInputStream(file); //创建网络服务器接受客户请求 ServerSocket ss=new ServerSocket(3108); Socket client=ss.accept(); //创建网络输出流并提供数据包装器 OutputStream netOut=client.getOutputStream(); OutputStream doc=new DataOutputStream(new BufferedOutputStream(netOut)); //创建文件读取缓冲区 byte[] buf=new byte[2048]; int num=fos.read(buf); while(num!=(-1)){//是否读完文件 doc.write(buf,0,num);//把文件数据写出网络缓冲区 doc.flush();//刷新缓冲区把数据写往客户端 num=fos.read(buf);//继续从文件中读取数据 } fos.close(); doc.close(); }} 客户方实现代码:import java.io.*;import java.net.*; public class FileClient{ public static void main(String[] args)throws Exception{ //使用本地文件系统接受网络数据并存为新文件 File file=new File("newFile.jpg"); file.createNewFile(); RandomAccessFile raf=new RandomAccessFile(file,"rw"); // 通过Socket连接文件服务器 Socket server=new Socket(InetAddress.getLocalHost(),3108); //创建网络接受流接受服务器文件数据 InputStream netIn=server.getInputStream(); InputStream in=new DataInputStream(new BufferedInputStream(netIn)); //创建缓冲区缓冲网络数据 byte[] buf=new byte[2048]; int num=in.read(buf); while(num!=(-1)){//是否读完所有数据 raf.write(buf,0,num);//将数据写往文件 raf.skipBytes(num);//顺序写文件字节 num=in.read(buf);//继续从网络中读取文件 } in.close(); raf.close(); }}