java数据的传输
- Tcp传输
Tcp传输
使用javaee 打交道 的是服务器(客户端);
数据的传输的方式有osi参考模型和tcp ip参考模型。
概述:
osi参考模型:模型过于理想化 应用层 表示层 会话层 传输层 网络层数据 链路层物理层
tcp ip参考模型: 就是一种规范 应用层(协议:http ftp dns) 传输层(协议:tcp udp) 网络层(协议:ip) 物理+数据链路层(协议:link)
tcp协议的传输要注意的是:
使用tcp协议之前先建立要连接数据传输,传输之前,一定采用三次握手的协议,确保是可靠传输。
客户端和服务端,进行大量的数据传输 释放连接,效率慢。
练习:
我使用的是MyEclipse和Eclipse方式进行配合。
一个当成发送端,一个作为接受端。
发送信息—发送端代码:
public void client() {
// 套接字 ip地址加端口号
OutputStream os =null;
Socket socket=null;
try {
InetAddress byName = InetAddress.getByName("127.0.0.1");
socket = new Socket(byName, 8899);
os= socket.getOutputStream();
os.write("admin,hellweqeo, i is sdsa".getBytes());
} catch (Exception e) {
// TODO: handle exception
}finally{
if(os != null){
try {
os.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if(socket != null){
try {
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
接受端的代码:
public static void main (String[] args) throws Exception{
System.out.println("等待收到的数据");
// 创建服务器,指明自己的端口号
ServerSocket ss = new ServerSocket(8899);
Socket socket = ss.accept();
InputStream stream = socket.getInputStream();
byte [] by=new byte[1024];
int len;
while((len=stream.read(by))!=-1){
String str = new String(by,0,len);
System.out.println(str);
}
运行的结果:
我们先运行接受端,将服务打开:
继续运行发送端的数据:
然后我们回到接收端:
我们可以看到,数据就被传输过去了。
不仅仅可以进行文字的传输,还可以进行图片的传输。
图片的传输方式:
发送端:
@Test
public void clientSendImg() throws Exception{
Socket socket = new Socket(InetAddress.getByName("127.0.0.1"),8899);
OutputStream ou = socket.getOutputStream();
FileInputStream fis=new FileInputStream(new File("u.jpg"));
byte []b=new byte[1024];
int len;
while((len=fis.read(b))!=-1){
ou.write(b,0,len);
}
fis.close();
ou.close();
socket.close();
}
接受端:
public static void main(String[] args) throws Exception {
System.out.println("等待收到的图片的数据");
ServerSocket s= new ServerSocket(8899);
Socket accept = s.accept();
InputStream is=accept.getInputStream();
FileOutputStream fos=new FileOutputStream(new File("u-c.jpg"));
byte []b=new byte[1024];
int len;
while((len=is.read(b))!=-1){
fos.write(b,0,len);
}
fos.close();
is.close();
accept.close();
s.close();
System.out.println("接受完毕!");
}
结果运行图:
也是先开始运行服务端,就是接收端的服务。
然后运行发送端的数据:
然后我们再回接收端:
出现接受成功了。我们刷新一下文件。
打开看看。我们可以看到图片完全被复制过来了。