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小时内删除。
发表评论