发送代码:
Socket socket=new Socket("127.0.0.1",9090);
DataOutputStream output=new DataOutputStream(socket.getOutputStream());
output.writeUTF("test.txt"); //每个文件发送前先发送文件名
File file=new File("D:\\test.txt");
FileInputStream in=new FileInputStream(file);
byte[] b = new byte[1024];
int n = in.read(b);
while (n != -1) // 没到最后
{
if (n == 1024)
output.write(b);
else
output.write(b, 0, n);
n = in.read(b);
}
接收代码:
ServerSocket serverSocket=new ServerSocket(9090);
System.out.println("wait for connect");
Socket socket=serverSocket.accept();
DataInputStream inputStream=new DataInputStream(socket.getInputStream());
String str=inputStream.readUTF();
System.out.println(str);
File file=new File("F:\\"+str);//保存
file.createNewFile();
FileOutputStream outputStream=new FileOutputStream(file);
byte[] b = new byte[1024];
int n = inputStream.read(b);
while (n != -1)
{
if (n == 1024)
outputStream.write(b);
else
{
outputStream.write(b, 0, n);
break;
}
n = inputStream.read(b);
}
假如我循环发送文件,再循环接收,那么在接收第一个文件时会在什么时候结束啊?n=-1只是表示网络流没内容,循环发送文件时会不会把全部文件接收到第一个去?
我的疑惑是怎么去判断第一个文件已经接受完毕,循环发送,用n=-1判断读到底,是读到第一个文件的底还是全部内容的底?是不是会在每个文件发送完自动加结束符啊?因为我看到readUTF()这个方法要处理catch (EOFException e)这个异常。搞不懂。。。。。求解!
java socket如何实现一次传送多个文件
1、直接流拼接,循环要传输的文件列表,多个InputStream,然后输出到一个OutputStream,这个out就是发送数据的端口,为了接收端能够识别每个文件从而分割流,需要每个流中结尾添加分隔符。其实这就是HTTP文件上传的做法。2、就比较简单了,职业使用ZIP工具包吧需要传输的多文件压缩成一个文件传输,接收端直接...
java socket多文件传输问题
用多线程,每个线程创建一个socket连接,每个socket连接负责传输一个文件,服务端的serversocket每次accept一个socket连接,也建立一个新线程,该线程负责对应socket的文件传输 每个文件写入完毕的时候关闭输出流,建新文件后重新建立输出流用于写入
java局域网如何实现文件互传?
1. 创建Socket对象,指定接收方的IP地址与端口号。2. 调用Socket的connect方法建立连接。3. 打开一个文件读取,将文件内容以字节形式读出。4. 将文件内容通过Socket的输出流发送给接收方。5. 等待接收方接收完成,关闭Socket连接。接收方步骤:1. 创建Socket对象,指定接收方的IP地址与端口号。2. 调用S...
java socket编程涉及到timeout异常类型
在网络编程中,timeout异常类型是常见的问题,主要包括SocketTimeoutException、ConnectTimeoutException、ReadTimeoutException和WriteTimeoutException。SocketTimeoutException,表示在等待连接时超时。解决方法包括检查网络连接,检查服务器是否可用,使用线程池来处理连接。ConnectTimeoutException,表示在连接时超时。
java socket编程如何测量文件传输速度
解决方案一:发送时发送一个记录客户端时间的包,同时记录好这个包的大小 。服务端在收到这个包后,拆包。取出客户端时间和自己的服务端时间时行差值计算。然后,接下去就好做了 解决方案二:在发送数据的时候获取当前系统时间,并将其作为初始时间保存下来(比如long beginTime=毫秒数),传输到客户端;...
J2ME中.网络编程中.要怎么关闭所有连接,我的代码总是异常
当客户端强行关闭的时候回报 连接重置异常 那么你用try块捕获这个异常就可以了
Java TCP socket通信,如何实现发送十六进制值,并在数据接收窗口中显示...
import java.net.*;public class Client{ static byte num=1;private int portNum;public Client(int portnum){ this.portNum=portnum;System.out.println("您是第"+num+"位客服端");num++;} public void sentMessage(String me){ \/\/都是向服务器发信息端口号1999 try{ DatagramSocket ds=new...
...fileinputstream),客户端应该如何接收?(socket )
其实这个问题你应该先想一下socket到底是一个什么东西,在网络编程中socket到底用来做什么的。socket:在操作系统内核中它代表网络连接的一个端点(endpoint),在应用程序中它代表一个打开的文件。socket pair唯一确定的一条网络连接,socket pair就是客户端socket和服务端socket的一个组合。也就是客户端ip和...
java:帮忙看下程序,下面的程序为什么无法相互发送消息?
请使用ps.flush()发送并清空缓存区。。。不然光print("你真的很牛");是没有办法发送的 而且一楼说的是对的,网络会有延迟,最好还是用线程来做 二楼的也是对的,虽然用eclipse不public类系统也能找到main方法,但是正规写法这样是不正确的 你可以百度一下flush()方法看看其具体的用法 ...
关于java socket编程和局域网游戏的延迟
局域网的延迟用socket来编程应该不会出现500ms的延迟。应该是数据传输的问题。就是说你传输的数据量太大了,以至于消耗了500ms的时间。网络游戏,客户端为什么那么大,因为所有的传输只是一些命令而已。。。而不会去传输图像。服务器,只是做数据的处理和命令的传输,其他事情都放到客户端去。