我估计是输入输出流的问题。在eclipse下运行时总不能得到设想的结果。。import java.net.*;
import java.io.*;
public class ServerTCP {
public static void main(String[] args) throws Exception
{
ServerSocket serversocket=null;
Socket socket=null;
DataInputStream in=null;
DataOutputStream out=null;
serversocket=new ServerSocket(8000);
socket=serversocket.accept();
in=new DataInputStream(socket.getInputStream());
out=new DataOutputStream(socket.getOutputStream());
byte[] buf=new byte[100];
in.read(buf);
String str=new String(buf);
System.out.println("On Server..."+" "+str);
str="message form server...";
buf=str.getBytes();
out.write(buf);
}
}
import java.net.*;
import java.io.*;
public class UserTCP {
public static void main(String[] args) throws Exception
{
Socket socket=new Socket("localhost",8000);
DataInputStream in=new DataInputStream(socket.getInputStream());
DataOutputStream out=new DataOutputStream(socket.getOutputStream());
String str="I am client";
byte[] buf =new byte[100];
buf=str.getBytes();
out.write(buf);
in.read(buf);
str=new String(buf);
System.out.println("On client..."+" "+str);
}
}
首先,谢谢各位大大们的解答。大大们提到的错误我改正了下,可是仍无法得到我想要的答案。。以下是我修改后运行的结果:
server端: byte[] bufR=new byte[100];
byte[] bufW=new byte[100];
in.read(bufR);
String str=new String(bufR);
System.out.println("On Server..."+" "+str);
str="message form server...";
bufW=str.getBytes();
out.write(bufW);
user端:
String str="I am client";
byte[] bufW =new byte[100];
bufW=str.getBytes();
out.write(bufW);
byte[] bufR=new byte[100];
in.read(bufR);
str=new String(bufR);
System.out.println("On client..."+" "+str);
On Server... I am client□□□□□□□□□□□□□□□□□□□□□□□□□□□□
问题是,server端的write方法没运行起?还是user端没收到数据?
悲剧的是。第二次运行得到
On client... message form server...□□□□□□□□□□□□□□□□□□□□□□□□□□□□
两个只有一个显示出来了!!郁闷啊
java中网络流的read方法,什么时候会返回
itjobjava老师讲过流的末尾会返回-1, 像你这种情况就是当对方将socket的输出流关闭后, 你将对方的输出都读完后,再读下一个字节就会返回-1.如果是用阻塞IO的话,它会选择阻塞,不会返回-1,直到timeout抛出异常。
为什么会报java.io.IOException: Unable to read entire header; 0...
1. 文件或网络资源不可用或已损坏。检查资源是否正常可用,文件或网络连接是否正常。2. 输入流的读取位置未正确设置。确保在调用`read()`方法前,输入流的读取位置正确设置。3. Java虚拟机(JVM)内存不足。在尝试读取大量数据时,JVM可能因内存不足而无法完成操作。增加JVM的堆内存大小可能会解决此问题...
javaio文件流read方法返回-1?
当文件读取完毕,read方法将返回-1,表示EOF状态。其次,针对标准输入(stdin),当没有更多的输入数据时,read方法同样会返回-1。最后,对于网络流(socket),在没有接收到数据或连接关闭后,read方法也会返回-1,提示EOF状态。
字节流VS字符流:揭秘两者的神秘面纱!
Java中的流可以分为文件流、网络流和过滤流三种类型。文件流用于处理文件,网络流用于处理网络连接,而过滤流用于对其他类型的流进行过滤和转换。在Java编程语言中,字节流处理的最基本单位为单个字节,它通常用来处理二进制数据。Java中最基本的两个字节流类是InputStream和OutputStream,它们分别代表了基本...
j2me开发,向文件写入中文字符时,末尾的数据丢失
b1 就可以进行下面的操作了。我的回答的依据是:用蓝牙进行 PC 与 J2ME 作网络流来传输数据时,若用你操作的方法,会出错,在手机的 RMS 中保存的是缺胳膊断腿的内容,我排除了网络连接的问题,因为我使用的是单一字节传输,不存在字节漏传的问题。在 JAVA 中用流可以解决很多问题,祝你成功!
谁知道什么是节点流和处理流
文件只是流可操作的IO设备之一,除了文件流,还有网络流,内存流,磁带流等等。数据流是一串连续传输的数据的集合,就像水管里的水流一样,在水管的一端一点一点的供水,而在水管的另一端看到的是一股连续不断的水流,用于写入数据的程序可以一段接一段的向数据流管道中写入数据,这些数据段按先后顺序...
java中的序列化和持久化之间的关系是什么
序列化就诞生了。工程师可以通过网络流的方式将类信息发送出去,也可以存在文件中。这种方式称为序列化。持久化呢,何谓持久?说白了就是将数据存在数据库中,这样数据就不会丢失。两者的关系就是雷锋和雷峰塔的关系,就是没有关系。好咯~ 如果想了解更多或是需要视频教程之类进阶一下的,可艾特我 ...
有个JAVA程序,读取实时视频,求可以修改为录像的工具,或者方法
将Java程序从读取实时视频修改为录像工具,可以遵循以下步骤和方法:修改数据源:确保程序能够接收来自视频流的数据,并保持数据流稳定。如果原程序已支持从实时视频源(如摄像头或网络流)读取,这部分可能不需要修改。添加存储逻辑:引入文件操作库(如Java NIO或Apache Commons IO),用于创建和管理文件。...
java方面的几个名词解释
Java虚拟机有自己想象中的硬件,如处理器、堆栈、寄存器等,还具有相应的指令系统。4、节点流 流是字节序列的抽象概念。流和文件的差别:文件是数据的静态存储形式,而流是指数据传输时的形态。文件只是流的操作对象之一。流按其操作的对象不同可以分为文件流、网络流、内存流、磁带流等。Java流类可分为...
socket传输中,java的对象序列化和反序列化过程中是如何确保数据的完整...
·ObjectInputStream和ObjectOutputStream类所读写的对象必须实现了Serializable接口。对象中的transient(一种标记,表示变量是临时的)和static类型的成员变量不会被读取和写入。这两个类可以用于网络流中传送对象。( transient:java语言的关键字,变量修饰符,如果用transient声明一个实例变量,当对象存储时,...