【网络编程中福在线源码出售、图片上传案例】

网络编程:编写基于网络的应用程序中福在线源码出售QQ2952777280【话仙源码论坛】hxforum.com,实现网络之间的数据传输。

网络编程的三要素

  1. 通信协议: 网络中数据传输的规则
    UDP协议:面向无连接,不可靠(有可能丢失数据包)
    TCP协议:面向有连接,可靠(比较安全)

  2. ip地址:网络中主机的一个唯一标识
    ipv4: 占4个字节 127.0.0.1 本机的地址
    ipv6: 占16个字节

  3. 端口号: 计算机中某一个连接网络的应用程序
    范围:0~65535。 1024之间的端口号不建议使用

TCP客户端
客户端用Socket表示
public class TCPClient {
public static void main(String[] args) throws IOException {
//1. 建立连接
Socket socket=new Socket("127.0.0.1",10086);
FileInputStream fis=new FileInputStream("day11-code\e.jpg");
//2. 往服务端写数据
OutputStream out = socket.getOutputStream();
out.write("你好服务端".getBytes());
//告诉服务端一个结束标记
socket.shutdownOutput();
fis.close();
//3. 读取服务端返回的数据
InputStream in = socket.getInputStream();
len = in.read(bs);
System.out.println(new String(bs,0,len));
//4. 释放资源
socket.close();
}
}

TCP服务端
服务端用ServerSocket表示
public class TCPServer {
public static void main(String[] args) throws IOException {
//1. 建立连接
ServerSocket server = new ServerSocket(10086);
//2. 监听客户端Socket
Socket socket = server.accept();
//3. 读取客户端发过来数据
InputStream in = socket.getInputStream();
byte[] bs=new byte[1024];
int len=in.read(bs);
System.out.println(new String(bs,0,len));

    //4. 往客户端写回数据
    OutputStream out = socket.getOutputStream();
    out.write("图片上传成功".getBytes());

    //5.关闭客户端
    socket.close;
    //服务端资源一般不用关闭
    server.close();
}

}

图片上传案例
客户端代码
public class UpLoadClient {
public static void main(String[] args) throws IOException {
//1. 建立连接
Socket socket=new Socket("127.0.0.1",10086);
FileInputStream fis=new FileInputStream("day11-code\e.jpg");
//2. 往服务端写数据
OutputStream out = socket.getOutputStream();
byte[] bs=new byte[1024];
int len;
while((len=fis.read(bs))!=-1){
out.write(bs,0,len);
}
//告诉服务端一个结束标记
socket.shutdownOutput();
fis.close();
//3. 读取服务端返回的数据
InputStream in = socket.getInputStream();
len = in.read(bs);
System.out.println(new String(bs,0,len));
//4. 释放资源
socket.close();
}
}
服务端代码
public class UpLoadServer {
public static void main(String[] args) throws IOException {
//1. 建立连接
ServerSocket server = new ServerSocket(10086);
while(true){
Socket socket = server.accept();
new Thread(() -> {
try {
//3. 读取客户端发过来数据
InputStream in = socket.getInputStream();
//服务端这边需要把读取到的图片保存在D:\image文件夹下
File dir=new File("D:\image");
//如果文件夹不存在,则创建改文件夹
if(!dir.exists()){
dir.mkdirs();
}
//自动生成一个文件名,利用毫秒值+随机数当做文件名。
long time = System.currentTimeMillis();
String filename=time+new Random().nextInt(1000)+"";
FileOutputStream fos=new FileOutputStream(new File(dir,filename+".jpg"));
byte[] bs=new byte[1024];
int len;
while((len=in.read(bs))!=-1){
fos.write(bs,0,len);
}
fos.close();
//4. 往客户端写回数据
OutputStream out = socket.getOutputStream();
out.write("图片上传成功".getBytes());
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}).start();
}
}
}

猜你喜欢

转载自blog.51cto.com/13941535/2164877