java为什么在网络传输中socket.read()返回1代表读取完,以前都是返回…
1、read(bytes)返回的是个整数,是每次填充给bytes数组的长度。这个方法在按bytes数组读取文件。不等于-1是因为出现-1就说明文件已经读取结束了。
2、itjobjava老师讲过流的末尾会返回-1, 像你这种情况就是当对方将socket的输出流关闭后, 你将对方的输出都读完后,再读下一个字节就会返回-如果是用阻塞IO的话,它会选择阻塞,不会返回-1,直到timeout抛出异常。
3、socket 其实用的是IO流来交互的,在inputstream read得到-1 因为已到达流末尾而不再有数据可用,则返回 -1。
4、public int read() throws IOException用来读取单个字符,返回作为整数读取的字符,范围在0~65535,如果到流的末尾,则返回-1。所以你的代码中read()返回的是所读到字符的整型。(char)i是指输出所读字符。
5、那么Java中就是用-1来表示这个末尾的, 因为-1不会在数据中出现。而为了返回-1, 那么只能用int。当流中读取到一个字符时, read()方法内部就会当作int返回, 如果读到流末尾, 直接返回-1。
java的socket流的read问题
1、HTTP协议是有固定格式的,由Header + Body组成,你可以先去看看相关协议说明。
2、socket 其实用的是IO流来交互的,在inputstream read得到-1 因为已到达流末尾而不再有数据可用,则返回 -1。
3、比如说每一帧作为一行写入Socket,客户端每次从socket读取一行。这样客户端每次都是读取一帧。
4、流的末尾会返回-1, 像你这种情况就是当对方将socket的输出流关闭后, 你将对方的输出都读完后,再读下一个字节就会返回-如果是用阻塞IO的话,它会选择阻塞,不会返回-1,直到timeout抛出异常。
5、socket.read()的结果是读取的byte长度,1的话表示读了一个byte,不是结束。
Java中socket填的ip
1、java中从Socket中获取IP地址通过Socket的getInetAddress()方法即可获得Socket中的Ip地址。其中Socket中还可以通过getLocalAddress()获取Socket绑定的本地地址。
2、用于本地的网络测试连接,也就是你可以在本机上搭建服务器,然后使用10.1 进行连接,这是一个对内的网络地址。
3、new Socket(10.1,8880)前面那个IP是服务器的地址,只要这个IP写正确了,服务器放在哪里,客户端都能连上去的。120。0.1最简单的解释就是本机地址,你用这个IP,访问的就是你自己。
4、客户端程序创建Socket 对象时需要服务端程序的IP地址以及程序运行端口号,这样客户端发出连接请求,服务端有一个ServerSocket对象监听该端口,收到连接返回一个Socket对象与客户端建立链接,这样就可以通信了。
5、新建一个ServerSocket对象然后用accept()方法接受请求连接的Socket对象在调用获得的Socket对象的getInetAddress()方法获取InetAddress对象在调用InetAddress对象的getHostAddress方法来获取IP地址。
6、服务器和客户端都用一个IP,但端口不同,一般服务器端是固定端口,而多个客户端用其他的多个端口进行连接。当然你想模拟更真实的效果,又没有多台机器,可以搭建虚拟机,比如vmware,把客户端或服务器放到虚拟机里去。
javasocket.连接服务端第一次读取不到数据第二次开始
1、可能是接收一次后就关闭 套接字 了。你仔细看一下代码。看看是服务器还是客户端断开套接字或者退出了。
2、解决办法:1:把读消息的方法写入线程里。2:使用Nio机制。
3、你不会是用serverSocket接收了一次就关掉了吧,这个要一直打开的,写成一个死循环。或者有可能你建立的客户端线程只执行一次。
4、楼主其实只发送了2个数据:“aaa”,5但是你的服务器端却在死循环里面一直在读取。因为数据只读两次就读完了,没有数据了,所以提示需要reset.就是说你想在继续读的话,就应该先reset,不过这没有意义。
java一个Socket连接多线程是否能操作两个读取流
可以啊 ,不过需要新建两个实现Runnable 借口的类,重写run方法,一个实现读取,另一个实现输出的功能。再用两条线程分别操作这两个方法。
当然不行。一个socket就像一个管道,你的数据就像水流,假设不同的数据是不同颜色的墨水,黑色和红色都往一个管道里面走,出来的时候就分不出来了。
可以写个demo试一下啊,应该是可以的,socket接收到的消息只能被其中一个线程接收。线程1 和2 接受到的肯定不是同一个消息。会有先后之分。看你怎么控制。比如从接收的消息是ABCD,那么这相当于一个资源。
首先SOCKET JAVA的东西都有例子,客户端程序和服务器程序,网上很多例子,随便找来调试下。链接成功后,在服务器端写IO流,记得有追加到文件末尾的方法,看下API吧。
socket一个链接1个流。考虑到服务器的性能,并发的socket连接不能太多,一个客户端只允许建立一个socket连接。
能。把socket作成一个长连接,后者说socket本身就是一个种链接,这个链接你不kill掉,就会存在(理论上。。