JAVA基础之网络编程

目录

1.网络编程三要素:

2.UDP网络发送端步骤:

3.UDP网络接收端步骤:

4.TCP客户端步骤:

5.TCP接收端步骤:

6.相关案例:

 UDP练习1:

TCP练习1:

 TCP练习2:

 


1.网络编程三要素:

1.IP地址

static InetAddress getByName(String host)//确定主机名称的IP地址。
String getHostName()//获取此IP地址的主机名
String getHostAddress()//返回文本显示中的IP地址字符串


2.端口: 标识设备中的应用程序


3.协议:计算机在连接和通讯时要遵循的规则


2.UDP网络发送端步骤:


1.建立发送数据对象:

DatagramSocket()//构造数据报套接字并将其绑定到本地主机上的任何可用端口。


2.将数据打包:

DatagramPacket(byte[] buf, int length, InetAddress address, int port)
//构造用于发送长度的分组的数据报包 length指定主机上到指定的端口号。


3.发送数据

void send(DatagramPacket p)//从此套接字发送数据报包。


4.关闭资源:

void close() //关闭此数据报套接字。


3.UDP网络接收端步骤:


1.建立接受数据对象:

DatagramSocket(int port)//构造数据报套接字并将其绑定到本地主机上的指定端口。


2.将数据打包:

DatagramPacket(byte[] buf, int length)//构造一个 DatagramPacket用于接收长度的数据包 length


3.接收数据:

void receive(DatagramPacket p) //从此套接字接收数据报包。


4.整理数据:

byte[] getData() //返回数据缓冲区。


5.关闭资源


4.TCP客户端步骤:


1.建立发送数据对象:

Socket(InetAddress address, int port) //创建流套接字并将其连接到指定IP地址的指定端口号。


2.获取输入流,读取数据,获取输出流,写数据

1. BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
2. BufferedReader br = new BufferedReader(new FileReader("myNet\\s.txt"));
BufferedWriter bw = new BufferedWriter(new FileWriter("itheima\\myNet\\a.txt"));


3.定义结束标记

void shutdownOutput() //禁用此套接字的输出流。


4.获取输入流,接收服务器的反馈:

BufferedReader br1 = new BufferedReader(new InputStreamReader(s.getInputStream()));


5.关闭资源


5.TCP接收端步骤:


1.建立接受数据对象

ServerSocket(int port) //创建绑定到指定端口的服务器套接字。


2.建立监听对象

Socket accept() //侦听要连接到此套接字并接受它


3.获取输入流,读取数据,获取输出流,写数据

1. BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
2. BufferedReader br = new BufferedReader(new FileReader("myNet\\s.txt"));
BufferedWriter bw = new BufferedWriter(new FileWriter("itheima\\myNet\\a.txt"));


4.获取输出流,写数据,给予反馈:

BufferedWriter bw1 = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));


5.关闭资源

6.相关案例:

 UDP练习1:

1.需求:
                发送端:数据来自于键盘输入,知道输入数据为886时,发送数据结束

                接收端:因为接收端不知道发送端什么时候停止发送,故采用死循环。
2.代码实现:

        1.发送端:
 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;

public class udpsendDemo {
    public static void main(String[] args) throws IOException {
        DatagramSocket ds = new DatagramSocket();

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String line;
        while((line = br.readLine())!=null){
            if(line.equals("886")) {
                break;
            }
            byte[] bys = line.getBytes();
            DatagramPacket dp = new DatagramPacket(bys,bys.length, InetAddress.getByName("172.24.164.227"),10086);
            ds.send(dp);
        }
            ds.close();
    }
}

         2.接收端:
 

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

public class udpreceiveDemo {
    public static void main(String[] args) throws IOException {
        DatagramSocket ds = new DatagramSocket(10086);

        while(true){
            byte[]bys = new byte[1024];
            DatagramPacket dp = new DatagramPacket(bys, bys.length);

            ds.receive(dp);

            int length = dp.getLength();
            byte[] datas = dp.getData();
            String data = new String(datas,0,length);
            System.out.println("数据是:"+data);

        }
    }
}

 3.运行结果:

        1.发送端:

         2.接收端:

TCP练习1:

1.需求:
         客户端:数据来自键盘输入,知道输入的数据是886,发送结束

          服务器:接收到的数据在控制台输出

2.代码实现:
        
    
    1.客户端:

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

public class ClientDemo {
    public static void main(String[] args) throws IOException {
        Socket s = new Socket("172.24.164.227",10086);
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
        String line;
        while((line = br.readLine())!=null){
            if(line.equals("886")){
                break;
            }
//            byte[]bys = line.getBytes();
//            OutputStream os = s.getOutputStream();
//            os.write(bys);
            bw.write(line);
            bw.newLine();
            bw.flush();

        }
        s.close();
    }
}

        2.服务器:

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

public class ServerDemo {
    public static void main(String[] args) throws IOException {
        ServerSocket ss = new ServerSocket(10086);

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

3.运行结果

    
    1.客户端:



       
2.服务器:

        

 TCP练习2:

1.需求

        客户端:数据来自于文件,接收服务器的反馈

        服务器:接受到的数据写入文本文件,给出反馈

2.代码实现:

        1.客户端:

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

public class ClientDemo {
    public static void main(String[] args) throws IOException {
        Socket s = new Socket("172.24.164.227",10086);

        BufferedReader br = new BufferedReader(new FileReader("myNet\\s.txt"));
        BufferedWriter bw = new BufferedWriter(new FileWriter("myNet\\a.txt"));

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

        //定义结束标记
        s.shutdownOutput();
//        System.out.println(11111);
//        InputStream is = s.getInputStream();
        BufferedReader br1 = new BufferedReader(new InputStreamReader(s.getInputStream()));
        String line1;
        while((line = br1.readLine())!=null){
            System.out.println("客户端收到的数据是:"+line);
        }
        br.close();
        bw.close();
        br1.close();
        s.close();

    }
}

        2.服务器:

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

public class ServerDemo {
    public static void main(String[] args) throws IOException {
        ServerSocket ss = new ServerSocket(10086);

        Socket s = ss.accept();
        BufferedReader  br = new BufferedReader(new FileReader("myNet\\s.txt"));
        BufferedWriter bw = new BufferedWriter(new FileWriter("myNet\\a.txt"));

        String line;
        while((line = br.readLine())!=null){//等待读取数据
            bw.write(line);
            bw.newLine();
            bw.flush();
        }
//        System.out.println(22222);
        BufferedWriter bw1 = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
        String line1 = "数据已上传成功!";
        bw1.write(line1);

        bw.close();
        br.close();
        bw1.close();
        ss.close();

    }
}

3.运行结果

总结:

以上内容属于自学,可能不是很全面,但为了方便日后的观看和复习,在此发文,如发现有错误请联系博主,欢迎指正。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

十亿少男的梦421

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值