手记

第84节:Java中的网络编程(中

标题图

第84节:Java中的网络编程(中)

实现客户端和服务端的通信:

客户端需要的操作,创建socket,明确地址和端口,进行键盘录入,获取需要的数据,然后将录入的数据发送给服务端,为socket输出流,然后进行读取服务端发送回来的大写数据,为socket读取流,最后进行客户端显示器的显示,进行读写操作,关闭资源。

网络编程TCP客户端

package com.dashucoding.tcp3;import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.io.OutputStream;import java.io.OutputStreamWriter;import java.io.PrintWriter;import java.net.Socket;import java.net.UnknownHostException;public class TransClient {    public static void main(String[] args) throws IOException {        // 客户端
        // 创建socket 明确地址和端口
        Socket s = new Socket("192.168.1.151",10005);        
        // 键盘录入
        BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));        
        // 网络, socket输出流//      OutputStream out = s.getOutputStream();
        
        // 传的是字符数据, 转换,提高效率//      BufferedWriter bufOut = new BufferedWriter(new OutputStreamWriter(out));
        
        // 打印流,既能接收字符又能接收字节
        PrintWriter out = new PrintWriter(s.getOutputStream());        
        // 读取流,读取服务端发来的数据//      InputStream in = s.getInputStream();
        BufferedReader bufIn = new BufferedReader(new InputStreamReader(s.getInputStream()));        
        // 显示数据,使用输出语句
        
        // 频繁读写,读键盘
        String line = null;        while((line=bufr.readLine()) != null) {            if("over".equals(line)) {                break;
            }            // 读取键盘的数据发送到服务端
            out.println(line);            
            // 读取服务端返回的数据
            String upperText = bufIn.readLine();
            System.out.println(upperText);
            
        }        
        // 关闭资源
        s.close();
        
    }

}

对于服务端,要创建一个服务端的socket,然后明确端口,要读取客户端发送过来的数据,要读取socket输入流,接着使用socket输出流,将数据发送给客户端,进行读写操作,关闭资源。

网络编程TCP服务端

package com.dashucoding.tcp3;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.PrintWriter;import java.net.ServerSocket;import java.net.Socket;public class TransServer {    public static void main(String[] args) throws IOException {

        System.out.println("服务端运行。。。");        // 服务端:
        // 创建服务端的socket,明确端口
        ServerSocket ss = new ServerSocket(10005);        while (true) {            // 获取客户端对象

            Socket s = ss.accept();            
            // 打印ip地址
            System.out.println(s.getInetAddress().getHostAddress()+"...connected");            // socket输入流,读取客户端发过来的数据
            BufferedReader bufIn = new BufferedReader(new InputStreamReader(s.getInputStream()));            // socket输出流,将数据发送给客户端//          PrintWriter out = new PrintWriter(s.getOutputStream());
            PrintWriter out = new PrintWriter(s.getOutputStream(), true);            // 频繁的读写操作
            String line = null;            while ((line = bufIn.readLine()) != null) {                // 如果客户端发送过来的是over
                if ("over".equals(line)) {                    break;
                }                
                // 客户端的数据
                System.out.println(line);                // 字母转大写
                out.println(line.toUpperCase());                // 都在缓冲区中,刷新//              out.flush();
            }            // 关闭客户端
            s.close();
        }
    }

}
package com.dashucoding.tcp3;import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.io.OutputStream;import java.io.OutputStreamWriter;import java.io.PrintWriter;import java.net.Socket;import java.net.UnknownHostException;public class TransClient {    public static void main(String[] args) throws IOException {
        
        System.out.println("客户端运行。。。");        // 客户端
        // 创建socket 明确地址和端口
        Socket s = new Socket("192.168.2.151",10005);        
        // 键盘录入
        BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));        
        // 网络, socket输出流//      OutputStream out = s.getOutputStream();
        
        // 传的是字符数据, 转换,提高效率//      BufferedWriter bufOut = new BufferedWriter(new OutputStreamWriter(out));
        
        // 打印流,既能接收字符又能接收字节//      PrintWriter out = new PrintWriter(s.getOutputStream());
        PrintWriter out = new PrintWriter(s.getOutputStream(), true);        
        // 读取流,读取服务端发来的数据//      InputStream in = s.getInputStream();
        BufferedReader bufIn = new BufferedReader(new InputStreamReader(s.getInputStream()));        
        // 显示数据,使用输出语句
        
        // 频繁读写,读键盘
        String line = null;        // 都一行,有行终止符才返回
        while((line=bufr.readLine()) != null) {            // 读取键盘的数据发送到服务端//          out.print(line+"\r\n");
            out.println(line);            // 刷数据,都在缓冲区中//          out.flush();
            if("over".equals(line)) {                break;
            }            
            // 读取服务端返回的数据
            String upperText = bufIn.readLine();
            System.out.println(upperText);
            
        }        
        // 关闭资源
        s.close();
        
    }

}

上传文件

void shutdownInput() 此套接字的输入流置于“流的末尾”void shutdownOutput() 禁用此套接字的输出流String toString() 将此套接字转换为String.

客户端:

package com.dashucoding.net.uploadtext;import java.io.BufferedReader;import java.io.FileReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.PrintWriter;import java.net.Socket;import java.net.UnknownHostException;public class UploadTextClient {    public static void main(String[] args) throws UnknownHostException, IOException {
        System.out.println("上传文件客户端运行。。。");        // 客户端
        // 创建socket 明确地址和端口
        Socket s = new Socket("192.168.43.126", 10006);        // 读取文本文件
        BufferedReader bufr = new BufferedReader(new FileReader("tempfile\\client.txt"));        // 将数据发送给服务端
        PrintWriter out = new PrintWriter(s.getOutputStream(), true);        
        
        // 显示数据,使用输出语句

        // 频繁读写,读键盘
        String line = null;        // 都一行,有行终止符才返回true
        while ((line = bufr.readLine()) != null) {
            
            out.println(line);

        }        
        // 给服务端发送一个结束标记,条约标记//      out.println("over");
        s.shutdownOutput();        // 向服务端发送了结束标记
        
        // 读取流,读取服务端发来的数据
        BufferedReader bufIn = new BufferedReader(new InputStreamReader(s.getInputStream()));
        String info = bufIn.readLine();
        System.out.println(info);        // 关闭资源
        bufr.close();
        s.close();
    }

}

服务端:

package com.dashucoding.net.uploadtext;import java.io.BufferedReader;import java.io.FileWriter;import java.io.IOException;import java.io.InputStreamReader;import java.io.PrintWriter;import java.net.ServerSocket;import java.net.Socket;public class UploadTextServer {    public static void main(String[] args) throws IOException {
        System.out.println("上传文本服务端运行。。。");        // 服务端:
        // 创建服务端的socket,明确端口
        ServerSocket ss = new ServerSocket(10006);        while (true) {            // 获取客户端对象

            Socket s = ss.accept();
            System.out.println(s.getInetAddress().getHostAddress() + "...connected");            // socket输入流,读取客户端发过来的数据
            BufferedReader bufIn = new BufferedReader(new InputStreamReader(
                    s.getInputStream()));            // socket输出流,目的是文件
            PrintWriter pw = new PrintWriter(new FileWriter("tempfile\\server.txt"), true);            // 频繁的读写操作
            String line = null;            while ((line = bufIn.readLine()) != null) {                if("over".equals(line)) {                    break;
                }
                
                pw.println(line);
            }            
            // 发回给客户端,上传成功
            PrintWriter out = new PrintWriter(s.getOutputStream(),true);
            out.println("上传成功");            
            // 关闭客户端
            s.close();
        }
    }

}

上传图片

客户端:

package com.dashucoding.net.uploadpic;import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.net.Socket;import java.net.UnknownHostException;public class UploadPicClient {    public static void main(String[] args) throws IOException {
        
        System.out.println("上传图片客户端运行。。。");        // 上传图片
        // 创建socket
        Socket s = new Socket("192.168.43.126",10007);        
        // 读取图片,图片路径
        File picFile = new File("tempfile\\001.jpg");
        FileInputStream fis = new FileInputStream(picFile);        
        // socket 输出流
        OutputStream out = s.getOutputStream();        
        byte[] buf = new byte[1024];        int len = 0;        while((len=fis.read(buf)) != -1) {
            out.write(buf,0,len);
        }        
        // 告诉服务器端图片数据发送完毕,不要等着读了。
        s.shutdownOutput();        
        // 读取上传成功
        InputStream in = s.getInputStream();        byte[] bufIn = new byte[1024];        int lenIn = in.read(bufIn);
        System.out.println(new String(bufIn, 0, lenIn));        
        // 关闭
        fis.close();
        s.close();
        
    }

}

服务端:

package com.dashucoding.net.uploadpic;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.net.ServerSocket;import java.net.Socket;import org.omg.CORBA_2_3.portable.OutputStream;public class UploadPicServer {    public static void main(String[] args) throws IOException {
        
        
        System.out.println("上传图片服务端运行。。。");        // 创建serversocket
        ServerSocket ss = new ServerSocket(10007);        while (true) { // 实现上传多回
            // 获取客户端
            Socket s = ss.accept();
            String ip = s.getInetAddress().getHostAddress();
            System.out.println(ip+"...connected");            // 读取图片数据
            InputStream in = s.getInputStream();            // 写图片数据到文件
            File picFile = new File("tempfile\\server.jpg"); // 存储图片
            FileOutputStream fos = new FileOutputStream(picFile);            byte[] buf = new byte[1024];            int len = 0;            while ((len = in.read(buf)) != -1) {
                fos.write(buf, 0, len);
            }            // 给客户端返回一个回馈信息
            java.io.OutputStream out = s.getOutputStream();
            out.write("上传成功".getBytes());            // 关闭资源
            fos.close();
            s.close();
        }
    }

}

如何解决图片重名的问题:

package com.dashucoding.net.uploadpic;import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.net.Socket;import java.net.UnknownHostException;public class UploadPicClient {    public static void main(String[] args) throws IOException {
        
        System.out.println("上传图片客户端运行。。。");        // 上传图片
        // 创建socket
        Socket s = new Socket("192.168",10007);        
        // 读取图片,图片路径
        File picFile = new File("tempfile\\001.jpg");
        FileInputStream fis = new FileInputStream(picFile);        
        // socket 输出流
        OutputStream out = s.getOutputStream();        
        byte[] buf = new byte[1024];        int len = 0;        while((len=fis.read(buf)) != -1) {
            out.write(buf,0,len);
        }        
        // 告诉服务器端图片数据发送完毕,不要等着读了。
        s.shutdownOutput();        
        // 读取上传成功
        InputStream in = s.getInputStream();        byte[] bufIn = new byte[1024];        int lenIn = in.read(bufIn);
        System.out.println(new String(bufIn, 0, lenIn));        
        // 关闭
        fis.close();
        s.close();
        
    }

}
package com.dashucoding.net.uploadpic;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.net.ServerSocket;import java.net.Socket;import org.omg.CORBA_2_3.portable.OutputStream;public class UploadPicServer {    public static void main(String[] args) throws IOException {
        
        
        System.out.println("上传图片服务端运行。。。");        // 创建serversocket
        ServerSocket ss = new ServerSocket(10007);        while (true) { // 实现上传多回
            // 获取客户端
            Socket s = ss.accept();
            String ip = s.getInetAddress().getHostAddress();
            System.out.println(ip+"...connected");            // 读取图片数据
            InputStream in = s.getInputStream();            // 写图片数据到文件
            // 创建目录
            File dir = new File("e:\\uploadpic");            // 如果不存在就创建目录
            if(!dir.exists()) {
                dir.mkdir();
            }            // 给文件编号
            // 加计数器
            int count = 1;            // 防止第二次为0
            File picFile = new File(dir, ip + "("+count+").jpg");//          if(picFile.exists()) {
            while(picFile.exists()) {
                count++;
                picFile = new File(dir, ip + "("+count+").jpg");
            }
            FileOutputStream fos = new FileOutputStream(picFile);            
//          File picFile = new File("tempfile\\" + ip + ".jpg");//          File picFile = new File("tempfile\\server.jpg"); 
            // 存储图片
            

            byte[] buf = new byte[1024];            int len = 0;            while ((len = in.read(buf)) != -1) {
                fos.write(buf, 0, len);
            }            // 给客户端返回一个回馈信息
            java.io.OutputStream out = s.getOutputStream();
            out.write("上传成功".getBytes());            // 关闭资源
            fos.close();
            s.close();
        }
    }

}



作者:达叔小生
链接:https://www.jianshu.com/p/58ddf1e28823


0人推荐
随时随地看视频
慕课网APP