网络编程-Socket通信实现服务器与客户端互传文件(JAVA语言实现)
在网络通信协议下,实现网络互连的不同计算机上运行的程序间可以进行数据交换.
网络编程三要素:ip地址、端口、协议
ip地址:
每台计算机指定的一个标识符,127.0.0.1是回送地址,可以代表本机地址 ,一般用来测试使用
ipconfig:命令行中查看本机地址
ping ip地址:检查网络是否连通
端口
两个应用程序的通信。IP地址是可以唯一标识网络中的设备,端口就是可以唯一标识设备中的应用程序。
端口号:用两个字节表示的整数,它的取值范围是0-65535.其中0-1023之间的端口号用于一些知名的网络服务和应用,普遍的应用程序要使用1024以上。
协议:
连接和通信的规则称为网络的通信协议.
常见的协议UDP和tcp
UDP:用户数据报协议.
无连接的通信协议,即使在传输数据的时候,发送端和接收端不建立连接.
消耗资源小,通信效率高.
UDP适用于音频,视频和普通数据的传输.
TCP:传输控制协议
是面向连接的同学,即传输数据之前,在发送端和接收端建立逻辑连接,然后再传输数据.
两台计算机无差错的数据传授.
需要经过三次握手,四次挥手
三次握手:
-
客户端向服务器端发出连接请求,等待服务确认
-
服务器端向客户端回送一个响应,通知客户端收到了连接请求
-
客户端再次向服务器端发送确认信息,确认连接
TCP是可以保证数据的安全的传输,上传文件,下载文件等等
Socket实现客户端向服务器发送文件
先运行服务器,再运行客户端部分的代码。
serverDemo02.java
package demo02;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class ServerDemo02 {
public static void main(String[] args) throws Exception{
//创建服务
ServerSocket serverSocket = new ServerSocket(9000);
//监听客户端连接
Socket socket = serverSocket.accept();//阻塞式监听会一直等待客户端连接
//获取输入流
InputStream is = socket.getInputStream();
//文件输出
File file=new File("E:/receive3.jpg");//接收文件地址
FileOutputStream fos = new FileOutputStream(file);
byte[] buffer = new byte[1024];
int len;
while ((len = is.read(buffer)) != -1) {
fos.write(buffer,0,len);
}//关闭资源
fos.close();
is.close();
socket.close();
serverSocket.close();
}
}
clientDemo02.java
package demo02;
import java.io.File;
import java.io.FileInputStream;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;
public class clientDemo02 {
public static void main(String[] args)