JAVA实现CS结构⼩程序程序功能:
客户端向服务器发送⼀个本地磁盘中的⽂件, 服务器程序接受后保存在其他位置.
客户端实现步骤:
1. 创建⼀个客户端对象Socket,构造⽅法中绑定服务器的IP地址 和 端⼝号
2. 使⽤Socket对象中的⽅法 getOutputSteam()获取⽹络字节输出流OutputStream对象
3. 使⽤字节输出流OutputStream对象中的write()⽅法,给服务器发送数据
4. 使⽤Socket对象中的getInputStream()获取⽹络字节输⼊流InputStream()对象 
5. 使⽤⽹络字节输⼊流InputStream对象中的read()⽅法,读取服务器回写的数据.
6. 释放Socket资源.
1import java.io.*;
2import java.Socket;
3
4public class TCPClient {
5public static void main(String[] args) throws IOException {
6//1.创建⼀个客户端对线Socket,构造⽅法中绑定服务器的IP地址和端⼝号
7              Socket socket = new Socket("127.0.0.1",8888);
8// Socket socket = new Socket("192.168.15.132",8888);
9//2.使⽤Socket对象中的⽅法getOutputStream(0获取⽹络字节输出流OutputSteam对象
10//这个流是个⽹络流,指向了服务器
11            OutputStream os = OutputStream();
12            File f = new  File("E:\\图⽚\\桌⾯图⽚\\宋民国\\222.jpg");
13            FileInputStream fis = new FileInputStream(f);
14byte[] bs = new byte[1024];
15int len;
16while((ad(bs))!=-1)
17            {
18//3.使⽤字节输出流OutputSteam对象中的⽅法write,给服务器发送数据
19                os.write(bs,0,len);
20            }
21//告诉服务器关闭输出
22            socket.shutdownOutput();
23            fis.close();
24
25//4.使⽤Socket对象中的⽅法getInputSteam()获取⽹络字节输⼊流InputSteam()对象
26            InputStream is = InputStream();
27//5.使⽤⽹络字节输⼊流InputSteam对象中的⽅法read,读取服务器回写的数据
28byte[] list = new byte[1024];
29int len1 = is.read(list);
30            String str1 = new String(list,0,len1);
31//6.释放资源(Socket)
32            System.out.println(str1);
33            socket.close();//只⽤关socket就⾏了
34
35
36    }
37 }
服务器端实现步骤:
1. 创建⼀个服务器对ServerSocket对象和指定的端⼝号⼀致.
2. 使⽤ServerSocket对象中的accept⽅法,获取请求的客户端对象Socket
3. 使⽤Socket对象中的getInputSream()⽅法
4. 使⽤⽹络字节输⼊流InputStream对象中的read()⽅法
5. 使⽤Socket对象中的getoutputStream()⽅法
6. 使⽤⽹络字节输出流OutputSteam对象中的write()⽅法
7. 释放资源.
1import java.io.*;
2import java.ServerSocket;
3import java.Socket;
4import java.util.Random;
5
6public class TCPServer {
7public static void main(String[] args) throws IOException {
8
9//method01();mkdirs方法
10        method02();
11
12    }
13public static void method02() throws IOException{
14//  1.创建⼀个服务器对ServerSocket对象和指定的端⼝号要⼀致.
15        ServerSocket serverSocket = new ServerSocket(8888);
16while(true) {
17//2.使⽤ServerSocket对象中的的⽅法accept,获取到请求的客户端对象Scoket
18// 创建多线程,提⾼可以同时与多个客户端进⾏数据的传输,提⾼效率
19            Socket socket = serverSocket.accept();//阻塞(如果没有客户端连接,程序会停⽌在这个地⽅) 20new Thread(() -> {
21try {
22//获得客户端Socket对象
23//给保存的⽂件设置随机名,避免覆盖
24long time = System.currentTimeMillis();
25//3.使⽤Socket对象中的⽅法getInputSteam() 获得输⼊流
26                    InputStream is = InputStream();
27                    FileOutputStream fos = new FileOutputStream(new File("C:\\123\\123", time + ".jpg")); 28byte[] list = new byte[1024];
29int len;
30//4.使⽤⽹络字节输⼊流InputStream对象中的read()⽅法
31while ((len = is.read(list)) != -1) {
32                        fos.write(list, 0, len);
33                    }
34                    fos.close();
35//5. 使⽤Socket对象中的getoutputStream()⽅法获得输出流
36                    OutputStream os = OutputStream();
37//6.使⽤⽹络字节输出流OutputSteam对象中的write()⽅法
38                    os.write("你好,图⽚传输完毕".getBytes());
39
40//7. 释放资源
41                    socket.close();
42                } catch (IOException e) {
43                    e.printStackTrace();
44                }
45            }).start();
46
47        }
48    }
49public static void method01() throws IOException {
50
51//1.创建⼀个服务器对ServerSocket对象和系统指定的端⼝号要⼀致.
52        ServerSocket server = new ServerSocket(8888);
53/*让服务器⼀直处于监听状态(死循环accept⽅法)
54        * 有⼀个客户端上传⽂件,就保存⼀个⽂件.
55        * */
56while (true){
57/* 在步骤1 与步骤2 之间会卡主, 等待客户端连接,连接了才会进⾏下⼀步*/
58
59//2.使⽤ServerSocket对象中的的⽅法accept,获取到请求的客户端对象Scoket  60            Socket socket = server.accept();
61
62
63//3.使⽤Socket对象中的⽅法getInputSteam()
64// 得到⼀个输⼊流,该输⼊流就可以调⽤read()⽅法
65            InputStream is = InputStream();
66// 4.使⽤⽹络字节输⼊流InptuSteam对象中的read
67
68//⽂件夹在是定⽂件夹下创建⽂件
69            File dir = new File("C:\\123\\123");
70/*    //⾃动⽣成⼀个时间戳,⾃动⽣成⽂件名,利⽤毫秒值当做⽂件名
71            *      ⽤System.currentTimeMilis()⽅法获取当前系统的毫秒值,
72            *      再加上⼀个随机数. 保证⽂件名是不重复的.
73            * */
74long time = System.currentTimeMillis();
75            String filename =time+new Random().nextInt(1000)+"";
76/*如果该⽂件夹不存在,则⽣成这个⽂件夹*/
77if(!ists()){
78                dir.mkdirs();
79            }
80/**/
81            FileOutputStream fos = new FileOutputStream(new File(dir,filename+".jpg")); 82
83            //  FileOutputStream fos = new FileOutputStream(destination);
84            byte[] bs = new byte[1024];
85            int len;
86            while((ad(bs))!=-1)
87            {
88                fos.write(bs,0,len);
89            }
90            //告诉
91            fos.close();
92
93
94            //5.使⽤Socket对象中的⽅法 getoutputSteam 回写收到了就谢谢.
95            //利⽤⽹络指向客户端.往客户端回写数据.
96            OutputStream os = OutputStream();
97            //都是字节流,转换为字节再写回去.
98            os.write("收到谢谢".getBytes());
99            /*socket.close();
100
101            server.close();*/
102
103        }
104
105
106
107    }
108 }
运⾏结果:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。