Java 网络编程 net包

Java提供的通信方式

Socket——面向连接

使用TCP协议,TCP是一种面向连接保证可靠传输的协议。通过TCP协议传输,得到的是一个顺序的无差错的数据流。Java提供的Socket和ServerSocket类支持TCP协议。在发送数据前,发送方和接收方各有一个Socket,它们要建立连接,一旦这两个Socket建立了连接,双方就可以进行双向数据传输,并且所有发送的信息都会在另一端以同样的顺序被接收,安全性高。

服务器程序编写

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.ServerSocket;
import java.net.Socket;

public class msa {
    public static void main(String[] args) {
        try {
            //1.创建ServerSocket对象,指明提供服务的端口4321
            ServerSocket ss = new ServerSocket(4321);
            System.out.println("Server OK");
            while(true) {
                //2.等待客户连接
                Socket s = ss.accept();
                //3.生成输入输出流
                InputStreamReader ins = new InputStreamReader(s.getInputStream());
                BufferedReader in = new BufferedReader(ins);
                //4.处理输入输出操作
                String x = in.readLine();
                System.out.println("Information from client:"+x);
                PrintStream out = new PrintStream(s.getOutputStream());
                out.println("hello client");

                //5.关闭输入输出流
                in.close();
                out.close();
                s.close();
            }
        }catch(IOException e) {}
    }
}

客户端程序编写

public class mca {
    public static void main(String[] args) {
        try {
            //1.创建Socket,本例中IP地址为本地地址127.0.0.1,端口为4321
            Socket s = new Socket("127.0.0.1",4321);
            //2.生成输入输出流
            PrintStream out = new PrintStream(s.getOutputStream());
            InputStreamReader ins = new InputStreamReader(s.getInputStream());
            BufferedReader in = new BufferedReader(ins);
            //处理输入输出
            String c = "hello server";
            out.println(c);
            String x = in.readLine();
            System.out.println("Information from server:"+x);
            //4.关闭输入输出流
            out.close();
            in.close();
            s.close();
        }catch(IOException e){

        }
    }
}

Datagram——无连接

使用UDP协议,UDP是一种无连接的协议,一个数据报是一个独立的单元,包含目的地址和要发送的数据,无需建立连接,只是简单地投出数据报,Java提供的DatagramSocket和DatagramPacket类支持UDP协议。效率高,但安全性不佳。

发送方程序编写

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.net.UnknownHostException;

public class udps {
    public static void main(String[] args) {
        //1.创建发送方套接字
        DatagramSocket ds = null;
        //2.构造发送方数据包:数据,数据长度,目的地址,端口号
        DatagramPacket dp = null;
        try {
            ds = new DatagramSocket(300);
        }catch(SocketException e) {

        }
        String str = "Hello World";
        try {
            dp = new DatagramPacket(str.getBytes(),str.getBytes().length,InetAddress.getByName("localhost"),9000);
        } catch (UnknownHostException e) {
        }
        //3.发送
        try {
            ds.send(dp);
        }catch(IOException e) {}
        //4.关闭发送方套接字
        ds.close();
    }
}

接收方程序编写

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;

public class udprec {
    public static void main(String[] args) {
        //1.创建接收方套接字
        DatagramSocket ds = null;
        //2.构造接收数据报包
        byte[] buf = new byte[1024];
        DatagramPacket dp = null;
        try {
            ds = new DatagramSocket(9000);
        }catch(SocketException e) {}
        dp = new DatagramPacket(buf,1024);
        //3.接收数据报包
        try {
            ds.receive(dp);
        }catch(IOException e) {}
        String str = new String(dp.getData(),0,dp.getLength())+"from"+dp.getAddress().getHostAddress()+":"+dp.getPort();
        System.out.println(str+" length="+dp.getLength());
        //4.关闭接收方套接字
        ds.close();
    }
}

编写简单的Web服务器

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.ServerSocket;
import java.net.Socket;

public class msa {
    public static void main(String[] args) {
        try {
            //1.创建ServerSocket对象,指明提供服务的端口4321
            ServerSocket ss = new ServerSocket(4321);
            System.out.println("Server OK");
            while(true) {
                //2.等待客户连接
                Socket s = ss.accept();
                //3.生成输入输出流
                InputStreamReader ins = new InputStreamReader(s.getInputStream());
                BufferedReader in = new BufferedReader(ins);
                //4.处理输入输出操作
                String x = in.readLine();
                System.out.println("Information from client:"+x);
                PrintStream out = new PrintStream(s.getOutputStream());
                out.println("hello client");

                //5.关闭输入输出流
                in.close();
                out.close();
                s.close();
            }
        }catch(IOException e) {}
    }
}

可以传输文件的Web服务器

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.ServerSocket;
import java.net.Socket;

public class webs1 {
    public static void main(String[] args) {
        try {
            ServerSocket ss = new ServerSocket(80);
            System.out.println("web server ok");
            while(true) {
                Socket s = ss.accept();
                vebserv1 p = new vebserv1(s);
                Thread t = new Thread(p);
                t.start();
            }
        }catch(Exception e) {
            System.out.println(e);
        }
    }
}
class vebserv1 implements Runnable{
    Socket s;
    static int i;
    public vebserv1(Socket s1) {
        s = s1;
    }
    public void run() {
        try {
            PrintStream out = new PrintStream(s.getOutputStream());
            BufferedReader in = new BufferedReader(new InputStreamReader(s.getInputStream()));
            String info = in.readLine();
            System.out.println("now got"+info);
            out.println("HTTP/1.0");
            out.println("Content-type: text/html");
            out.println("");
            int sp1 = info.indexOf(‘ ‘);
            int sp2 = info.indexOf(‘ ‘,sp1+1);
            String fn = info.substring(sp1+2,sp2);
            if(fn.equals("")||fn.endsWith("/")) fn = fn+"index.html";
            System.out.println("sending file: "+fn+" to client");
            InputStream fs = new FileInputStream(fn);
            byte buf[] = new byte[1024];
            int n;
            while((n=fs.read(buf))>=0) {
                out.write(buf,0,n);
            }
            out.close();
            s.close();
            in.close();
        }catch(Exception e) {System.out.println(e);}
    }
}

编写简单的代理服务器

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.URL;

public class msp {
    public static void main(String[] args) {
        try {
            ServerSocket ss = new ServerSocket(80);
            System.out.println("web server ok");
            while(true) {
                Socket s = ss.accept();
                mspserv p = new mspserv(s);
                Thread t = new Thread(p);
                t.start();
            }
        }catch(Exception e) {
            System.out.println(e);
        }
    }
}
class mspserv implements Runnable{
    Socket s;
    static int i;
    public mspserv(Socket s1) {
        s =s1;
    }
    public void run() {
        try {
            PrintStream out = new PrintStream(s.getOutputStream());
            BufferedReader in = new BufferedReader(new InputStreamReader(s.getInputStream()));
            String info = in.readLine();
            System.out.println("client is: "+s.getInetAddress());
            System.out.println("now got "+info);
            int sp1 = info.indexOf(‘ ‘);
            int sp2 = info.indexOf(‘ ‘,sp1+1);
            String targ = info.substring(sp1+1,sp2);
            System.out.println("now connecting "+targ);
            URL con = new URL(targ);
            InputStream gotoin = con.openStream();
            int n;
            byte buf[] = new byte[1024];
            out.println("HTTP/1.0");
            out.println("Content - type: text/html");
            out.println("");
            while((n = gotoin.read(buf))>=0) {
                out.write(buf,0,n);
            }
            out.close();
            s.close();
            in.close();
        }catch(Exception e) {System.out.println(e);}
    }
}

原文地址:https://www.cnblogs.com/heibaimao123/p/9527138.html

时间: 2024-09-29 09:19:35

Java 网络编程 net包的相关文章

Java网络编程和NIO详解4:浅析NIO包中的Buffer、Channel 和 Selector

Java网络编程与NIO详解4:浅析NIO包中的Buffer.Channel 和 Selector 转自https://www.javadoop.com/post/nio-and-aio 本系列文章首发于我的个人博客:https://h2pl.github.io/ 欢迎阅览我的CSDN专栏:Java网络编程和NIO https://blog.csdn.net/column/details/21963.html 部分代码会放在我的的Github:https://github.com/h2pl/ J

java网络编程serversocket

转载:http://www.blogjava.net/landon/archive/2013/07/24/401911.html Java网络编程精解笔记3:ServerSocket详解ServerSocket用法详解 1.C/S模式中,Server需要创建特定端口的ServerSocket.->其负责接收client连接请求. 2.线程池->包括一个工作队列和若干工作线程->工作线程不断的从工作队列中取出任务并执行.-->java.util.concurrent->线程池

20145311实验四 "Java网络编程及安全"

20145311实验四 "Java网络编程及安全" 程序设计过程 实验内容 ·掌握Socket程序的编写:·掌握密码技术的使用:·设计安全传输系统 ·利用加解密代码包,编译运行代码,一人加密,一人解密:·集成代码,一人加密后通过TCP发送: 实验步骤 在这之前进行了一个socket连接的例子:用百度做了个实验 下面是两人合作进行RSA的加密: 首先建立一个Socket对象,用来连接特定服务器的指定端口(我负责的是服务器端,郑凯杰负责的是客户端,所以也就是输入我这边的ip地址),输入的参

java网络编程socket解析

转载:http://www.blogjava.net/landon/archive/2013/07/02/401137.html Java网络编程精解笔记2:Socket详解 Socket用法详解 在C/S通信模式中,client需要主动创建于server连接的Socket(套接字).服务器端收到了客户端的连接请求,也会创建与客户连接的Socket.Socket可看做是通信两端的收发器.server与client都通过Socket来收发数据. 1.构造Socket 1.Socket() 2.So

java网络编程socket\server\TCP笔记(转)

java网络编程socket\server\TCP笔记(转) 2012-12-14 08:30:04|  分类: Socket |  标签:java  |举报|字号 订阅 1 TCP的开销 a  连接协商三次握手,c->syn->s,s->syn ack->c, c->ack->s b  关闭协商四次握手,c->fin->s, s->ack-c,s->fin->c,c->ack->s c  保持数据有序,响应确认等计算开销 d

Java网络编程基础【转】

网络编程 网络编程对于很多的初学者来说,都是很向往的一种编程技能,但是很多的初学者却因为很长一段时间无法进入网络编程的大门而放弃了对于该部分技术的学习. 在 学习网络编程以前,很多初学者可能觉得网络编程是比较复杂的系统工程,需要了解很多和网络相关的基础知识,其实这些都不是很必需的.首先来问一个问题:你 会打手机吗?很多人可能说肯定会啊,不就是按按电话号码,拨打电话嘛,很简单的事情啊!其实初学者如果入门网络编程的话也可以做到这么简单! 网络编程就是在两个或两个以上的设备(例如计算机)之间传输数据.

第13篇-JAVA 网络编程

第13篇-JAVA 网络编程 每篇一句 比我强大的人都在努力我还有什么理由不拼命 初学心得 不去追逐你所渴求你将永远不会拥有 (笔者JEEP/711)[JAVA笔记 | 时间:2017-04-22| JAVA 网络编程 ] 1.网络编程基本概念 1.什么是计算机网络 计算机网络是指将地理位置不同的具有独立功能的多台计算机及其外部设备通过通信线路连接起来在网络操作系统网络管理软件及网络通讯协议的管理和协调下实现资源共享和信息传递的计算机系统 把分布在不同地理区域的计算机与专门的外部设备用通讯线路互

Java网络编程【Socket服务端和客户端】

Socket 编程大家都不陌生,Java 学习中必学的部分,也是 Java网络编程核心内容之一.Java 网络编程又包括 TCP.UDP,URL 等模块.TCP 对应 Socket模块,UDP 对应 DatagramPacket 模块.URL 对应 URL 模块.其中 TCP 和 UDP 是网络传输协议,TCP 是数据流传输协议,UDP 是数据包传输协议.两者之间的异同就不在这里说了,推荐一本入门书籍 <TCPIP入门经典>.我们开始 Socket 服务端和客户端编程吧. 一.Socket 服

Java网络编程(一)

Java网络编程: 1.1: 网络编程:对于我这个“研究不深”的网络菜鸟来说,我觉得网络编程就是实现计算机与计算机之间通信的编程.写些能够实现计算机与计算机之间的通信就行了(目前来说). 1.2:一台计算机跟另外计算机通讯. 计算机与计算机通讯的三大要素: 1:ip地址---电脑 1.1:作用:唯一标识一台计算机. 回环地址:127.0.0.1==主机:localhost 主机地址作用:测试网卡是否正常. 2:找到相应的应用程序----端口号 端口号-----具有网络功能的应用程序的标识号,没有