【java笔记】网络编程

news/2024/5/17 16:46:05 标签: 网络通信, java, tcp, udp

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

java">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发送数据:

java">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接收数据:

java">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通信案例:

java">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();
    }
}

java">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发送数据:

java">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接收数据:

java">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();
        
    }
}

有反馈的传输数据:

java">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();
    }
}

java">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通信(来自键盘录入)

java">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();

        }
    }
}

java">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通信(服务器接受的内容保存到文本文件)

java">//客户端代码不变
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通信:客户端发送的内容来自文本文件

java">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通信:反馈+多线程

java">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();

    }
}

java">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();
        }


    }
}

java">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();
        }




    }
}


http://www.niftyadmin.cn/n/1757199.html

相关文章

Appium自动化框架从0到1之 Driver配置封装

不管是调用模拟器,还是调用真机,都需要准备一些driver的参数,以便被调用。 思想: 我们把driver配置信息,封装到yaml文件,然后通过读取yaml文件的内容,调用其driver信息。 为了更直观的看如何封装…

【磕代码】Java:300以内完全数的个数

package demo08sort; //求300以内的完全数 //所谓完全数&#xff0c;就是一个数等于它的所有非本身因数之和 public class exercise {public static void main(String[] args) {int num0;for (int i 1; i <300; i) {int s0;for (int j 1; j <i/2; j) {if(i%j0){ssj;}}i…

Appium自动化框架从0到1之Driver驱动的封装

上一篇写的是driver驱动的配置&#xff0c; 那么&#xff0c;这篇呢&#xff0c;我们要搞这三件事情&#xff1a; 1.driver驱动封装 2.日志配置文件加载 3.启动APP配置参数 下面&#xff0c;我们就在代码中实践&#xff1a; # -*- coding: utf-8 -*- """auth …

【java数据结构】排序,冒泡,插入,选择,希尔,归并,快速

1.1 Comparable排序接口 package demo08sort;public class Demo01Comparable {public static void main(String[] args) {Student s1new Student(49, "李白");Student s2new Student(53,"杜甫");Student max getMax(s1, s2);System.out.println(max.getN…

Appium自动化框架从0到1之 日志文件配置(log.conf)

在config文件中&#xff0c;我们先把log的输出格式&#xff0c;输出路径等参数抽离出来作为一个配置表&#xff0c; 这个写法&#xff0c;在selenium自动化框架中&#xff0c;是没有分离的。 所以&#xff0c;我们有get到一个新方法&#xff1a; 代码如下&#xff1a; log.conf…

【软件测试】测试背景,测试基础,技术运用

测试背景 2.软件开发过程 软件开发的模式 &#xff08;1&#xff09;大瀑布模式&#xff1a;大部分精力用在软件开发和编写代码上 &#xff08;2&#xff09;边写边改模式&#xff1a;快速制作用完就扔的小项目 &#xff08;3&#xff09;瀑布模式&#xff1a;从构思到最终的产…

Appium自动化框架从0到1之 公共方法的封装

在写测试用例的时候&#xff0c;最常用的就是方法的调用&#xff0c; 我们在这里&#xff0c;把公共方法封装到一个文件中&#xff0c; 这样以后需要使用&#xff0c;直接调用这个方法就可以了。 直接上代码&#xff1a; common_func.py # -*- coding: utf-8 -*- ""…

Appium自动化框架从0到1之 基类的封装

这里只封装了4个基类&#xff0c;其他的大家可以自己丰富~~ 直接上代码&#xff1a; baseView.py # -*- coding: utf-8 -*- """auth : carl_DJtime : 2020-7-9 """class BaseView(object):封装一些基类def __init__(self,driver):self.driver …