我在本地不用容器是可以socket传输文件的。
address 代表IP地址,port 表示套接字的端口
stream 为 true 时,表示为stream socket 流套接字,使用 TCP 协议,比较稳定可靠,但占用资源多
stream 为 false 时,表示为datagram socket 数据报套接字,使用 UDP 协议,不稳定,但占用资源少
timeout超时时间,如果是 0 的话,表示无限等待
Socket 常用设置参数
此方法是用来设置 TCP_NODELAY 属性的,属性的注释是这样的:此设置仅仅对 TCP 生效,主要为了禁止使用 Nagle 算法,true 表示禁止使用,false 表示使用,默认是 false。
setSoLinger 方法主要用来设置 SO_LINGER 属性值的。
注释上大概是这个意思:在我们调用 close 方法时,默认是直接返回的,但如果给 SO_LINGER 赋值,就会阻塞 close 方法,在 SO_LINGER 时间内,等待通信双方发送数据,如果时间过了,还未结束,将发送 TCP RST 强制关闭 TCP 。
setOOBInline 方法主要使用设置 SO_OOBINLINE 属性。
注释上说:如果希望接受 TCP urgent data(TCP 紧急数据)的话,可以开启该选项,默认该选项是关闭的,我们可以通过 Socket#sendUrgentData 方法来发送紧急数据。查询了很多资料,都建议尽可能的去避免设置该值,禁止使用 TCP 紧急数据。
setSoTimeout 方法主要是用来设置 SO_TIMEOUT 属性的。
注释上说:用来设置阻塞操作的超时时间,阻塞操作主要有:
ServerSocket.accept() 服务器等待客户端的连接;SocketInputStream.read() 客户端或服务端读取输入超时;DatagramSocket.receive()。
我们必须在必须在阻塞操作之前设置该选项, 如果时间到了,操作仍然在阻塞,会抛出 InterruptedIOException 异常(Socket 会抛出 SocketTimeoutException 异常,不同的套接字抛出的异常可能不同)。
对于 Socket 来说,超时时间如果设置成 0,表示没有超时时间,阻塞时会无限等待。
setSendBufferSize 方法主要用于设置 SO_SNDBUF 属性的,入参是 int 类型,表示设置发送端(输出端)的缓冲区的大小,单位是字节。
入参 sizehttp:// 必须大于 0,否则会抛出 IllegalArgumentException 异常。
一般我们都是采取默认的,如果值设置太小,很有可能导致网络交互过于频繁,如果值设置太大,那么交互变少,实时性就会变低。
setReceiveBufferSize 方法主要用来设置 SO_RCVBUF 属性的,入参是 int 类型,表示设置接收端的缓冲区的大小,单位是字节。
入参 size 必须大于 0,否则会抛出 IllegalArgumentException 异常。
一般来说,在套接字建立连接之后,我们可以随意修改窗口大小,但是当窗口大小大于 64k 时,需要注意:
必须在 Socket 连接客户端之前设置缓冲值;必须在 ServerSocket 绑定本地地址之前设置缓冲值。
setKeepAlive 方法主要用来设置 SO_KEEPALIVE 属性,主要是用来探测服务端的套接字是否还是存活状态,默认设置是 false,不会触发这个功能。
如果 SO_KEEPALIVE 开启的话,TCP 自动触发功能:如果两小时内,客户端和服务端的套接字之间没有任何通信,TCP 会自动发送 keepalive 探测给对方,对方必须响应这个探测(假设是客户端发送给服务端),预测有三种情况:
服务端使用预期的 ACK 回复,说明一切正常;服务端回复 RST,表示服务端处于死机或者重启状态,终止连接;没有得到服务端的响应(会尝试多次),表示套接字已经关闭了。
setReuseAddress 方法主要用来设置 SO_REUSEADDR 属性,入参是布尔值,默认是 false。
套接字在关闭之后,会等待一段时间之后才会真正的关闭,如果此时有新的套接字前来绑定同样的地址和端口时,如果 setReuseAddress 为 true 的话,就可以绑定成功,否则绑定失败。
在不同服务器上的容器之间进行Socket传输文件,建立Socket连接时需要使用以下参数:
IP地址:这是目标服务器的IP地址,可以是局域网内的IP地址或公网IP地址。
端口号:这是目标服务器上的Socket服务器程序监听的端口号,需要与服务器上的程序配置一致。
协议:需要指定使用的协议,例如TCP或UDP。
数据传输格式:需要指定数据传输时使用的编码格式,例如UTF-8或GBK等。
超时时间:可以指定建立连接或数据传输的超时时间,以避免长时间等待导致程序卡死。
在建立Socket连接时,还需要注意防火墙或网络安全策略等问题。如果防火墙或网络安全策略禁止了Socket连接,需要对相应的端口进行放行或修改安全策略,以保证数据能够正常传输。
暂无
– nihaoqingtuan 1年前