Java中的网络编制程序

时间:2019-09-22 15:44来源: 操作系统
第84节:Java中的网络编制程序 福寿无疆客商端和服务端的通讯: 客户端须求的操作,创立socket,明显地点和端口,实行键盘录入,获取必要的数码,然后将录入的数码发送给服务端,

图片 1

第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;                // 打印流,既能接收字符又能接收字节        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 {                break;            }            // 读取键盘的数据发送到服务端            out.println;                        // 读取服务端返回的数据            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;        while  {            // 获取客户端对象            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;            // 频繁的读写操作            String line = null;            while ((line = bufIn.readLine != null) {                // 如果客户端发送过来的是over                if ("over".equals {                    break;                }                                // 客户端的数据                System.out.println;                // 字母转大写                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;                // 打印流,既能接收字符又能接收字节//      PrintWriter out = new PrintWriter(s.getOutputStream;        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) {            // 读取键盘的数据发送到服务端//          out.print(line+"rn");            out.println;            // 刷数据,都在缓冲区中//          out.flush();            if("over".equals {                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;                        // 显示数据,使用输出语句        // 频繁读写,读键盘        String line = null;        // 都一行,有行终止符才返回true        while ((line = bufr.readLine != null) {                        out.println;        }                // 给服务端发送一个结束标记,条约标记//      out.println("over");        s.shutdownOutput();        // 向服务端发送了结束标记                // 读取流,读取服务端发来的数据        BufferedReader bufIn = new BufferedReader(new InputStreamReader(s.getInputStream;        String info = bufIn.readLine();        System.out.println;        // 关闭资源        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;        while  {            // 获取客户端对象            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 {                    break;                }                                pw.println;            }                        // 发回给客户端,上传成功            PrintWriter out = new PrintWriter(s.getOutputStream;            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;                // socket 输出流        OutputStream out = s.getOutputStream();                byte[] buf = new byte[1024];        int len = 0;        while((len=fis.read != -1) {            out.write(buf,0,len);        }                // 告诉服务器端图片数据发送完毕,不要等着读了。        s.shutdownOutput();                // 读取上传成功        InputStream in = s.getInputStream();        byte[] bufIn = new byte[1024];        int lenIn = in.read;        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;        while  { // 实现上传多回            // 获取客户端            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;            byte[] buf = new byte[1024];            int len = 0;            while ((len = in.read != -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;                // socket 输出流        OutputStream out = s.getOutputStream();                byte[] buf = new byte[1024];        int len = 0;        while((len=fis.read != -1) {            out.write(buf,0,len);        }                // 告诉服务器端图片数据发送完毕,不要等着读了。        s.shutdownOutput();                // 读取上传成功        InputStream in = s.getInputStream();        byte[] bufIn = new byte[1024];        int lenIn = in.read;        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;        while  { // 实现上传多回            // 获取客户端            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;            //          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 != -1) {                fos.write(buf, 0, len);            }            // 给客户端返回一个回馈信息            java.io.OutputStream out = s.getOutputStream();            out.write("上传成功".getBytes;            // 关闭资源            fos.close();            s.close();        }    }}

消除上传并发的题材

图片 2

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("",10007);                // 读取图片,图片路径        File picFile = new File("tempfile\001.jpg");        FileInputStream fis = new FileInputStream;                // socket 输出流        OutputStream out = s.getOutputStream();                byte[] buf = new byte[1024];        int len = 0;        while((len=fis.read != -1) {            out.write(buf,0,len);        }                // 告诉服务器端图片数据发送完毕,不要等着读了。        s.shutdownOutput();                // 读取上传成功        InputStream in = s.getInputStream();        byte[] bufIn = new byte[1024];        int lenIn = in.read;        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;        while  { // 实现上传多回            // 获取客户端            Socket s = ss.accept();            new Thread(new UploadPic.start();        }    }}

package com.dashucoding.net.uploadpic;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.net.Socket;// 创建任务// 线程完成任务后,会自动结束public class UploadPic implements Runnable {    private Socket s;    // 创建构造函数    public UploadPic {        this.s = s;    }    @Override    public void run() {        try {            // 主线程负债接收客户端,其它线程负责接收数据            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;            // 开始循环进行读写操作            // 一个线程,不能处理并发的数据            byte[] buf = new byte[1024];            int len = 0;            while ((len = in.read != -1) {                fos.write(buf, 0, len);            }            // 给客户端返回一个回馈信息            java.io.OutputStream out = s.getOutputStream();            out.write("上传成功".getBytes;            // 关闭资源            fos.close();            s.close();        } catch (IOException e) {            e.printStackTrace();        }    }}

客户端:浏览器,服务端:Tomcat

端口号,conserver.xml

图片 3

浏览器发送HTTP必要

GET / HTTP / 1.1Accept: Accept-Language:Accept-Encoding:User-Agent:Host:Connection:

央浼行,左券,应用层公约,超文本传输合同,须要格局,访问能源的渠道,http的协商版本,

图片 4

package com.dashucoding.net.myserver;import java.io.IOException;import java.io.InputStream;import java.io.PrintWriter;import java.net.Socket;import java.net.UnknownHostException;public class MyBrowser {    public static void main(String[] args) throws UnknownHostException, IOException {        // 浏览器发送http消息        Socket s = new Socket("",8080);                // 把信息发送给服务端        PrintWriter out=new PrintWriter(s.getOutputStream;        out.println("");        out.println();//空行                // 读取服务端的数据        InputStream in = s.getInputStream();        byte[] buf = new byte[1024];        String text = new String(buf,0,len);        System.out.print;        s.close();    }}

发送和http左券一样的音讯,收到了汤姆cat服务器再次回到的多寡。

图片 5

图片 6

package com.dashucoding.net.myserver;import java.awt.BorderLayout;import java.awt.EventQueue;import javax.swing.JFrame;import javax.swing.JPanel;import javax.swing.border.EmptyBorder;public class MyBrowserGui extends JFrame {    private JPanel contentPane;    /**     * Launch the application.     */    public static void main(String[] args) {        EventQueue.invokeLater(new Runnable() {            public void run() {                try {                    MyBrowserGui frame = new MyBrowserGui();                    frame.setVisible;                } catch (Exception e) {                    e.printStackTrace();                }            }        });    }    /**     * Create the frame.     */    public MyBrowserGui() {        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);        setBounds(100, 100, 450, 300);        contentPane = new JPanel();        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));        contentPane.setLayout(new BorderLayout;        setContentPane(contentPane);    }}

图片 7

url的描述

java.net类 urljava.lang.objectjava.net.url所有已实现的接口:serializablepublic final class url extends object implements serializableurl 表示一个统一的资源定位符,用于指向互联网"资源"的指针。

// 构造方法url (string spec):根据string表示形式创建url对象url (string protocol, string host, int port, string file)根据指定protocol,host,port号和file创建url对象

package com.dashucoding.net.url;import java.io.IOException;import java.io.InputStream;import java.net.MalformedURLException;import java.net.URL;import java.net.URLConnection;public class URLDemo {    public static void main(String[] args) throws IOException {        String str_url = "http://";                //将url地址封装成对象。        URL url = new URL;        //      System.out.println("getProtocol:"+url.getProtocol;//      System.out.println("getHost:"+url.getHost;//      System.out.println("getPort:"+url.getPort;//      System.out.println("getPath:"+url.getPath;//      System.out.println("getFile:"+url.getFile;//      System.out.println("getQuery:"+url.getQuery;                //获取指定资源的连接对象,封装了socket。        URLConnection conn = url.openConnection();        //      System.out.println;                InputStream in = conn.getInputStream();        byte[] buf = new byte[1024];        int len = in.read;        String text = new String(buf,0,len);        System.out.println;                    }}

openConnectionpublic URLConnection openConnection() throws IOException返回一个URLConnection对象,它表示到url所引用的远程对象的连接

urlconnection

图片 8

package com.dashucoding.net.url;import java.io.IOException;import java.io.InputStream;import java.net.MalformedURLException;import java.net.URL;import java.net.URLConnection;public class URLDemo {    public static void main(String[] args) throws IOException {        String str_url = "http://";        // 将url地址封装成对象。        URL url = new URL;//      System.out.println("getProtocol:"+url.getProtocol;//      System.out.println("getHost:"+url.getHost;//      System.out.println("getPort:"+url.getPort;//      System.out.println("getPath:"+url.getPath;//      System.out.println("getFile:"+url.getFile;//      System.out.println("getQuery:"+url.getQuery;        // 获取指定资源的连接对象,封装了socket。        URLConnection conn = url.openConnection();//      System.out.println;        InputStream in = conn.getInputStream();        byte[] buf = new byte[1024];        int len = in.read;        String text = new String(buf, 0, len);        System.out.println;    }}

互联网编程中HTTP版本的界别

http1.0伸手三回一而再就断开了,叁回接二连三只可以有一次呼吁,http1.1三回一连多次呼吁。

U智跑L用于剖析url地址,URubiconLConnection用于获取url的一连。

大范围的网络架构:cs和bs

client / server客户端和服务端,维护麻烦browser / server只需要服务端,只要系统内置浏览器所有的运算在服务端,简单易用

结言

好了,迎接在留言区留言,与我们大快朵颐你的阅历和感受。

谢谢你学习前几日的开始和结果,假使您以为那篇小说对您有扶持的话,也接待把它共享给越多的朋友,感激。

吴孟达先生同志小生:未来余生,唯独有您
You and me, we are family !
90后俊秀小伙,非凡的开销习贯;独立观念的力量;主动何况长于交流
简书博客: 吴孟达(Ng Man Tat)同志(Ng Man Tat)小生

结语

  • 下边我将一而再对 其余知识 深刻讲明 ,风野趣能够三翻五次关怀
  • 小礼物走一走 or 点赞

编辑: 操作系统 本文来源:Java中的网络编制程序

关键词: