socket客户端传文件到服务器,IO流的操作

socket客户端传文件到服务器,IO流的操作,第1张

当客户端断开连接Socket.close()时,服务器端可以接收到一个结束标志(-1)

例:

import java.io.File

import java.io.FileOutputStream

import java.io.IOException

import java.io.InputStream

import java.net.ServerSocket

import java.net.Socket

public class ServerMain {

public ServerMain() {

try {

File file = new File("C:\\face2.jpg")

FileOutputStream out = new FileOutputStream(file)

ServerSocket ss = new ServerSocket(30102)

Socket s = ss.accept()

InputStream in = s.getInputStream()

int b = -1

while((b = in.read()) != -1){

out.write(b)

}

// 当客户端断开连接Socket.close()时,服务器端接收到了一个结束标志(-1)

System.out.println(b)

s.close()

out.flush()

out.close()

} catch (IOException e) {

e.printStackTrace()

}

}

public static void main(String[] args) {

new ServerMain()

}

}

import java.io.File

import java.io.FileInputStream

import java.io.IOException

import java.io.OutputStream

import java.net.Socket

import java.net.UnknownHostException

public class ClientMain {

public ClientMain() {

try {

Socket s = new Socket("192.168.1.100", 30102)

File file = new File("C:\\face1.jpg")

FileInputStream in = new FileInputStream(file)

OutputStream out = s.getOutputStream()

int b = -1

while((b = in.read()) != -1){

out.write(b)

}

out.flush()

s.close()

in.close()

} catch (UnknownHostException e) {

e.printStackTrace()

} catch (IOException e) {

e.printStackTrace()

}

}

public static void main(String[] args) {

new ClientMain()

}

}

Socket实现服务器与客户端之间的物理连接,并进行数据传输。主要有TCP/UDP两个协议。Socket处于网络协议的传输层。

TCP:传输控制协议,面向连接的的协议,稳定可靠。当客户和服务器彼此交换数据前,必须先在双方之间建立一个TCP连接,之后才能传输数据。

UDP:广播式数据传输,UDP不提供可靠性,它只是把应用程序传给IP层的数据报发送出去,但是并不能保证它们能到达目的地。由于UDP在传输数据报前不用在客户和服务器之间建立一个连接,且没有超时重发等机制,故而传输速度很快。

优点:1.传输数据为字节级,传输数据可自定义,数据量小。相应的移动端开发,手机费用低

2.传输数据时间短,性能高

3.适合C/S之间信息实时交互

4.可以加密,数据安全性高

缺点:1.需要对传输的数据进行解析,转化为应用级的数据

2.对开发人员的开发水平要求高

3.相对于Http协议传输,增加了开发量

Http请求主要有http协议,基于http协议的soap协议,常见的http数据请求方式有get和post,web服务。

优点:1.基于应用级的接口使用方便

2.要求的开发水平不高,容错性强

缺点: 1.传输速度慢,数据包大。

2.如实现实时交互,服务器性能压力大

3.数据传输安全性差

Socket适用场景:网络游戏,银行交互,支付。

http适用场景:公司OA服务,互联网服务。

socket可以发送任意类型的数据。socket本身不限制你要发送什么,而是由你自己来定要发什么的。只要你接收端能识别发来的是什么即可。

协议的三个基本要素,语法、语义、同步。比如你用于表示文件属性的结构体或者其他什么数据长度固定是20字节,那么你就在发送文件内容之前把这20字节发送过去,接收端在接收内容之前,固定会先接收20字节并作为文件属性,随后接收到的内容才作为数据存入文件,这样就可以做到了。

关键点就在于自己要定好语法、语义、同步这些,发送端和接收端配合好动作。


欢迎分享,转载请注明来源:夏雨云

原文地址:https://www.xiayuyun.com/zonghe/378706.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-15
下一篇2023-05-15

发表评论

登录后才能评论

评论列表(0条)

    保存