【java笔记】网络编程

1.网络编程概述
三要素:
(1)iP地址:标识设备
(2)端口:标识应用程序
(3)协议:规则
iP地址:
分类:ipv4:32bit,ipv6:128bit
查看ip地址:ipconfig
看是否联通 ping +IP地址
InetAddress:

package demo07Internet;

import java.net.InetAddress;
import java.net.UnknownHostException;

/*
String getHostAddress​() 返回文本显示中的IP地址字符串。
String getHostName​() 获取此IP地址的主机名
static InetAddress getByName​(String host) 确定主机名称的IP地址。
 */
public class Demo01 {
    public static void main(String[] args) throws UnknownHostException {
        InetAddress ia = InetAddress.getByName("10.66.92.161");
        String hostName = ia.getHostName();
        String hostAddress = ia.getHostAddress();
        System.out.println(hostName+hostAddress);//windows10.microdone.cn10.66.92.161
    }
}

2.UDP
使用udp发送数据:

package demo07Internet;

import java.io.IOException;
import java.net.*;

/*
UDP发送数据
1.使用DatagramSocket类表示用于发送和接收数据报数据包的套接字
2.创建数据并将数据打包
DatagramPacket​(byte[] buf, int length, InetAddress address, int port)
构造一个数据包,发送长度为 length的数据包到指定主机上的指定端口号。
3.发送void send​(DatagramPacket p) 从此套接字发送数据报包。
4.关闭
 */
public class Demo02UDP {
    public static void main(String[] args) throws IOException {
        DatagramSocket ds=new DatagramSocket();
        byte[] bys = "hello,upd".getBytes();
        DatagramPacket dp = new DatagramPacket(bys,bys.length, InetAddress.getByName("10.66.92.161"),10086);
        ds.send(dp);
        ds.close();
    }
}

udp接收数据:

package demo07Internet;

import org.w3c.dom.ls.LSOutput;

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

/*
udp接收数据
1.创建接收端的socket对象
2.创建一个数据包用于接收数据
3.用receive方法接收数据
4.解析数据包,在控制台显示
5.关闭接收端
 */
public class Demo03UDP {
    public static void main(String[] args) throws IOException {
        DatagramSocket ds=new DatagramSocket(10086);
        byte[]bys=new byte [1024];
        DatagramPacket dp=new DatagramPacket(bys,bys.length);
        ds.receive(dp);

        byte[] dts = dp.getData();

        int length = dp.getLength();
        String s = new String(dts,0,length);
        
        System.out.println("接收到的数据是:"+s);
        ds.close();
    }
}

udp通信案例:

package demo07Internet;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.*;

/*
udp通信程序练习
 */
public class Demo04Send {
    public static void main(String[] args) throws IOException {
        //调用Datagram创建套接字
        DatagramSocket ds=new DatagramSocket();
        //键盘输入
        BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
        String s;
        while((s=br.readLine())!=null){
            if("886".equals(s)){
                break;
            }
            //创建网络包
            byte[] bys = s.getBytes();
            //DatagramPacket​(byte[] buf, int length, InetAddress address, int port)
            // 构造一个数据包,发送长度为 length的数据包到指定主机上的指定端口号。
            DatagramPacket dp=new DatagramPacket(bys,bys.length, InetAddress.getByName("10.66.92.161"),10099);
            ds.send(dp);

        }
        ds.close();
    }
}

package demo07Internet;

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

public class Demo05Receive {
    public static void main(String[] args) throws IOException {
        DatagramSocket ds=new DatagramSocket(10099);
        while (true){

            byte[] bys = new byte[1024];

            DatagramPacket dp=new DatagramPacket(bys,0,bys.length);
            ds.receive(dp);
            String s = new String(bys);
            System.out.println(s);
        }
        //ds.close();
    }
}

3.TCP
三次握手(客户端和服务器之间):
(1)客户端发送连接请求
(2)服务器收到连接请求,返回响应
(3)客户端收到响应,返回确认信息
使用场景:浏览网页,上传,下载
tcp发送数据:

package demo07Internet;

import java.io.IOException;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.Socket;

/*
tcp发送数据
 */
public class Demo06tcp {
    public static void main(String[] args) throws IOException {
        //创建套接字
        //Socket​(String host, int port) 创建流套接字并将其连接到指定主机上的指定端口号
        Socket so=new Socket("10.66.92.161",10088);
        //用输出流写数据
        //getOutputStream​() 返回此套接字的输出流。
        OutputStream os=so.getOutputStream();
        os.write("wolaile haah".getBytes());
        os.close();
    }
}

tcp接收数据:

package demo07Internet;

import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;

/*
tcp接收数据
 */
public class Demo07Tcp {
    public static void main(String[] args) throws IOException {
        //ServerSocket​(int port) 创建绑定到指定端口的服务器套接字。
        //创建ServerSocket对象
        ServerSocket ss =new ServerSocket(10088);
        //连接发送端的套接字
        //Socket accept​() 侦听要连接到此套接字并接受它。
        Socket s = ss.accept();
        //读数据
        InputStream is = s.getInputStream();
        byte[] bys = new byte[1024];
        int r = is.read(bys);
        String s1 = new String(bys,0,r);
        System.out.println(s1);
        
        //释放资源
        s.close();
        ss.close();
        
    }
}

有反馈的传输数据:

package demo07Internet;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;

//客户端:发送数据,接收服务器反馈
public class Demo08tcp {
    public static void main(String[] args) throws IOException {
        Socket s=new Socket("10.66.92.161",10088);
        //发送数据
        OutputStream os = s.getOutputStream();
        os.write("俺是中国人".getBytes());

        //接受反馈
        InputStream is = s.getInputStream();
        byte[] bys = new byte[1024];
        int len = is.read(bys);
        String s1 = new String(bys, 0, len);
        System.out.println(s1);

        //释放资源
        s.close();
    }
}

package demo07Internet;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;

//接收数据,给出反馈
public class Demo09tcp {
    public static void main(String[] args) throws IOException {
        ServerSocket ss=new ServerSocket(10088);
        Socket s = ss.accept();
        //读数据
        InputStream is = s.getInputStream();
        byte[] bys = new byte[1024];
        int len = is.read(bys);
        String s1 = new String(bys, 0, len);
        System.out.println(s1);

        //反馈,写数据
        OutputStream os = s.getOutputStream();
        os.write("服务器已经收到".getBytes());

        ss.close();




    }
}

tcp通信(来自键盘录入)

package demo07Internet;

import java.io.*;
import java.net.Socket;

//tcp通信,来自键盘录入
public class Demo10tcp {
    public static void main(String[] args) throws IOException {
        //客户端
        //创建socket对象
        Socket s=new Socket("10.66.92.161",10088);
        BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
        String line;
        while((line=br.readLine())!=null){
            if("886".equals(line)){
                break;
            }
            bw.write(line);
            bw.newLine();
            bw.flush();

        }
    }
}

package demo07Internet;

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

public class Demo11tcp {
    public static void main(String[] args) throws IOException {
        ServerSocket ss=new ServerSocket(10088);
        Socket s = ss.accept();
        BufferedReader br=new BufferedReader(new InputStreamReader(s.getInputStream()));
        String line;
        while((line=br.readLine())!=null){
            System.out.println(line);
        }

        ss.close();
    }
}

tcp通信(服务器接受的内容保存到文本文件)

//客户端代码不变
package demo07Internet;
//服务器接收到的内容写入文本文件
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;

public class Demo11tcp {
    public static void main(String[] args) throws IOException {
        ServerSocket ss=new ServerSocket(10088);
        Socket s = ss.accept();
        BufferedReader br=new BufferedReader(new InputStreamReader(s.getInputStream()));
        BufferedWriter bw=new BufferedWriter(new FileWriter("s.txt"));

        String line;
        while((line=br.readLine())!=null){
            bw.write(line);
            bw.newLine();
            bw.flush();
        }

        ss.close();
    }
}

tcp通信:客户端发送的内容来自文本文件

package demo07Internet;

import java.io.*;
import java.net.Socket;

//tcp通信,客户端发送的内容来自文本文件
public class Demo10tcp {
    public static void main(String[] args) throws IOException {
        //客户端
        //创建socket对象
        Socket s=new Socket("10.66.92.161",10088);
        BufferedReader br=new BufferedReader(new FileReader("Box.java"));
        BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
        String line;
        while((line=br.readLine())!=null){
            bw.write(line);
            bw.newLine();
            bw.flush();

        }
        bw.close();
        s.close();

    }
}

tcp通信:反馈+多线程

package demo07Internet;

import java.io.*;
import java.net.Socket;

//tcp通信,客户端发送的内容来自文本文件
public class Demo10tcp {
    public static void main(String[] args) throws IOException {
        //客户端
        //创建socket对象
        Socket s=new Socket("10.66.92.161",10088);
        BufferedReader br=new BufferedReader(new FileReader("Box.java"));
        BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
        String line;
        while((line=br.readLine())!=null){
            bw.write(line);
            bw.newLine();
            bw.flush();

        }
        s.shutdownOutput();//文件传输结束的标志
        //接受反馈
        BufferedReader br1=new BufferedReader(new InputStreamReader(s.getInputStream()));
        String data = br1.readLine();
        System.out.println("客户端接收到反馈"+data);

        br.close();
        s.close();

    }
}

package demo07Internet;
//服务器接收到的内容写入文本文件
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;

public class Demo11tcp {
    public static void main(String[] args) throws IOException {
        ServerSocket ss=new ServerSocket(10088);
        while(true){
            Socket s = ss.accept();
            new Thread(new ServerThread(s)).start();
        }


    }
}

package demo07Internet;

import java.io.*;
import java.net.Socket;

public class ServerThread implements Runnable {
    private Socket s;
    public ServerThread(Socket s) {
    this.s=s;
    }
    public void run(){
        BufferedReader br= null;
        try {
            br = new BufferedReader(new InputStreamReader(s.getInputStream()));
            //BufferedWriter bw=new BufferedWriter(new FileWriter("copy.java"));
            //解决名称冲突
            int count=0;
            File file=new File("copy["+count+"].java");
            while(file.exists()){
                count++;
                file=new File("copy["+count+"].java");
            }
            BufferedWriter bw=new BufferedWriter(new FileWriter(file));
            String line;
            while((line=br.readLine())!=null){
                bw.write(line);
                bw.newLine();
                bw.flush();
            }
            //给出反馈
            BufferedWriter bw1=new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
            bw1.write("文件上传成功");
            bw1.newLine();
            bw1.close();

        } catch (IOException e) {
            e.printStackTrace();
        }




    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值