网络编程(InetAddress类、UDP、TCP)

摘要:
DatagramPacket类用于封装UDP通信中发送和接收的数据。应用程序:sender:importjava.io.IOException;importjava.net.DatagramPacket;importjava.net.DatagramSocket;importjava.net.InetAddress;importjava.net.SocketException;importjava.net.UnnknownHostException;importjava.util.Scanner;PublicclassSend{publicstaticvoidmain{while{DatagramSocketsend;System.out.println;Scannersc=newScanner;Stringstr=sc.text();try{send=newDatagramSSocket;//发送数据包字节〔〕buffer=str.getBytes();DatagramPacketdp=newDatagramPacket;//封装数据//InetAddress.getByName,获取端口号send.send;//发送send.close();}catch{e.printStackTrace(){e.printStackTrace();}}}}接收程序:importjava.io.IOException;importjava.net.DatagramPacket;importjava.net.DatagramSocket;importjava.net.SocketException;PublicclassReceive{publicstaticvoid mainthrowsSocketException{DatagramSocketreceive=newDatagramSwitch;byte[]buf=newbyte[1024];而{DatagramPacketdp=newDataGramPack;请尝试{receive.rereceive;}catch{e.printStackTrace();}StringstrRecv=newString+“+”from“+dp。getAddress()+“”+dp。getPort();System.out.println;}}3.TCP通信概念:TCP通信分为客户端和服务器,客户端必须连接到服务器才能实现通信。

1、InetAddress类

(1)IP和端口号:

IP(InternetProtocol,IP)互联网协议地址:唯一标识一台计算机。

端口号:用于区分不同的应用程序。取值范围是0~65535,其中0~1023被系统保留。

网络编程(InetAddress类、UDP、TCP)第1张

在计算机A访问计算机B是通过IP地址进行查找的,接着在计算机B上通过应用程序的端口号找到相应的程序。

(2)InetAddress类常用方法:

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

public class InetAddressDemo {
    public static void main(String[] args) {

        try {
            InetAddress local = InetAddress.getLocalHost();

            System.out.println(local.getHostAddress());// 返回本地主机地址
            System.out.println(local.getHostName());// 主机名

            InetAddress address = InetAddress.getByName("主机名");
            System.out.println(address);

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

2、UDP协议

(1)概念:

UDP (User Datagram Protocol)用户数据报协议,在数据传输时彼此之间不需要建立连接,传输前需要把数据定义成数据报,并且传输效率高,但是不安全。

(2)DatagramPacket类

用于封装UDP通信中发送和接收的数据。

网络编程(InetAddress类、UDP、TCP)第2张

第一个构造方法指明了数据包的大小,用于接收数据。

第二个构造方法指明了数据包的大小,目标地址、端口号,用于发送数据。

(3)DatagramSocket类

接收和发送数据包。

网络编程(InetAddress类、UDP、TCP)第3张

网络编程(InetAddress类、UDP、TCP)第4张

 第一个构造方法中,系统会随机分配一个空闲端口,用于发送端。

第二个构造方法,需要指定端口号,既可以用于发送端也可用于接收端。

(4)应用:

发送端:

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

public class Send {
    public static void main(String[] args) {
        while (true) {
            DatagramSocket send;
            System.out.println("请输入数据:");

            Scanner sc = new Scanner(System.in);
            String str = sc.next();
            try {
                send = new DatagramSocket(3001);// 发送数据包
                byte[] buffer = str.getBytes();
                DatagramPacket dp = new DatagramPacket(buffer, buffer.length,
                        InetAddress.getByName("主机名"), 3000);// 封装数据
                // InetAddress.getByName("主机名"),获取端口号
                send.send(dp);// 发送
                send.close();
            } catch (SocketException e) {
                e.printStackTrace();
            } catch (UnknownHostException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

    }
}

接收端:

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

public class Receive {
    public static void main(String[] args) throws SocketException {

        DatagramSocket receive = new DatagramSocket(3000);

        byte[] buf = new byte[1024];
        while (true) {
            DatagramPacket dp = new DatagramPacket(buf, 1024);
            try {
                receive.receive(dp);
            } catch (IOException e) {

                e.printStackTrace();
            }
            String strRecv = new String(dp.getData(), 0, dp.getLength())
                    + "     " + "来自" + dp.getAddress() + "  " + dp.getPort();
            System.out.println(strRecv);
        }

    }
}

 3、TCP通信

(1)概念:

TCP通信分为客户端和服务器端,实现通信必须由客户端连接服务端。

(2)Socket类(客户端):

网络编程(InetAddress类、UDP、TCP)第5张

网络编程(InetAddress类、UDP、TCP)第6张

可以指定IP地址和端口号,可以根据IP和端口号运行服务端程序,只是IP地址的形式不同。

(3)ServerSocket类(服务器端):

网络编程(InetAddress类、UDP、TCP)第7张

没有绑定端口号,需要调用bind方法。

可以绑定端口号,默认最大连接数量为50。

可以绑定端口号,指定最大连接数量。

可以绑定端口号,指定最大连接数量、IP地址。适用于计算机上有多块网卡和多个 IP。

(4)应用:

客户端,可以一直发送数据:

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Scanner;

public class Client {
    public static void main(String[] args) throws UnknownHostException,
            IOException {
        Socket s = new Socket(InetAddress.getByName("DESKTOP-R14D2UH"), 7999);// 通过IP和端口号连接服务器
        OutputStream out = s.getOutputStream();

        out.write("客户端已启动".getBytes());
        InputStream in = s.getInputStream();
        byte[] buffer = new byte[1024];
        int length = in.read(buffer);
        System.out.println(new String(buffer, 0, length));

        while (true) {
            Scanner sc = new Scanner(System.in);
            System.out.println("请输入数据到服务器:");
            String str = sc.next();
            out.write(str.getBytes());

        }

    }
}

服务器,一直接收客户端发送的数据:

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

public class Server {
    public static void main(String[] args) throws IOException {
        ServerSocket ss = new ServerSocket(7999);
        Socket s = ss.accept();// 在服务端的指定端口监听客户端发来的连接请求,并与之连接
        OutputStream out = s.getOutputStream();
        out.write("你已经连接上了服务器".getBytes());// 字节输出
        while(true){
        InputStream in = s.getInputStream();
        byte[] buffer = new byte[1024];
        int length = in.read(buffer);
        System.out.println(new String(buffer, 0, length));}
    

    }
}

免责声明:文章转载自《网络编程(InetAddress类、UDP、TCP)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Android sendevent/getevent 用法bean的创建(五)第四部分 bean构造器的查找下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

golang socket编程

TCP client Go语言中通过net包中的DialTCP函数来建立一个TCP连接,并返回一个TCPConn类型的对象,当连接建立时服务器端也创建一个同类型的对象,此时客户端和服务器端通过各自拥有的TCPConn对象来进行数据交换。一般而言,客户端通过TCPConn对象将请求信息发送到服务器端,读取服务器端响应的信息。服务器端读取并解析来自客户端的请求...

udp用户数据报协议

  UDP 是User Datagram Protocol的简称, 中文名是用户数据报协议,是OSI(Open System Interconnection,开放式系统互联) 参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务,IETF RFC 768是UDP的正式规范。UDP在IP报文的协议号是17。   UDP协议全称是用户数据报协...

计算机网络基本知识

今天来讲讲网络,主要将传输层和应用层的一些基础知识 OSI七层模型:应用层(application)、表示层(presentation)、会话层(session)、传输层(transport)、网络层(network)、数据链路层(data)、物理层(physical/base)。用一句英语总结就是 all people seem to need data...

UNIX网络编程——网络IPC:套接字

Contents 套接字接口 套接字描述符 寻址 字节序 地址格式 地址查询 绑定地址 建立连接 数据传输 套接字选项 带外数据 UNIX域套接字 使用套接字的示例 面向连接的ruptime 无连接的ruptime 套接字接口       套接字接口是一组用来结合UNIX I/O函数进行进程间通信的函数,大多数系统上都实现了它,包括各...

TCP/IP协议(一)网络基础知识 网络七层协议

参考书籍为《图解tcp/ip》-第五版。这篇随笔,主要内容还是TCP/IP所必备的基础知识,包括计算机与网络发展的历史及标准化过程(简述)、OSI参考模型、网络概念的本质、网络构建的设备等     下面是协议层从底层至顶层的一个模型图:   一、计算机网络的背景 1.1 计算机的发展 有人说:“20世纪最伟大的发明就是计算机”,自诞生伊始,计算机经历了...

zabbix 监控linux tcp连接数

            zabbix 监控linux tcp连接数                                      作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任。 一.TCP的状态概述 1>.端口状态转换 2>.TCP 三次握手 3>.四次断开 二.zabbix agent端配置监控TCP...