java网络编程基础

Posted innndown

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java网络编程基础相关的知识,希望对你有一定的参考价值。

1. UDP

DatagramSocket类:

  1. send()与receive()方法
  2. 绑定一个IP和Port

DatagramPacket类:

  1. 集装箱机制:封装数据
  2. 地址标签:目的地IP+目的地Port

接收方必须先于发送方运行

import java.net.*;
public class send//发送端
{
    public static void main(String [] args) throws Exception
    {
        DatagramSocket ds=new DatagramSocket();
        String str="hello world";
        DatagramPacket dp=new DatagramPacket(str.getBytes(),str.length(),
                InetAddress.getByName("127.0.0.1"),3000);
        
        System.out.println("Send: 准备发送信息");
        ds.send(dp);
        System.out.println("Send: 发送信息结束");             
        ds.close();
    }
}
import java.net.*;
public class receive//接收端
{
    public static void main(String[] args) throws Exception
    {
        DatagramSocket  ds=new DatagramSocket(3000);
        byte [] buf=new byte[1024];
        DatagramPacket dp=new DatagramPacket(buf,1024);
        
        System.out.println("Recv: 我在等待信息");
        ds.receive(dp);//阻塞,等待发送端连接
        System.out.println("Recv: 我接收到信息");
        String strRecv=new String(dp.getData(),0,dp.getLength()) +
        " from " + dp.getAddress().getHostAddress()+":"+dp.getPort(); 
        ds.close();
    }
}

2. TCP

TCP协议:有链接、保证可靠的无误差通讯:

  1. 服务器:创建一个ServerSocket,等待连接
  2. 客户机:创建一个Socket,连接到服务器
  3. 服务器:ServerSocket接收到连接,创建一个Socket和客户的Socket建立专线连接,后续服务器和客户机的对话(这一对Socket)会在一个单独的线程(服务器端)上运行。
  4. 服务器的ServerSocket解除与客户端连接,处于阻塞状态,继续等待连接,返回第一步。

技术图片

ServerSocket:等待响应的服务器端口:

  1. 需要绑定port,IP

Socket:运输通道:

  1. 客户端需要绑定服务器的IP和Port
  2. 客户端往Socket输入流写入数据,送到服务端
  3. 客户端从Socket输出流取服务器端过来的数据
  4. 同一个通道,服务端的输出流就是客户端的输入流;服务端的输入流就是客户端的输出流

技术图片

import java.net.*;
import java.io.*;
public class TcpServer
{
    public static void main(String [] args) 
    {
        try
        {
            ServerSocket ss=new ServerSocket(8001); //在001端口
            Socket s=ss.accept();                   //阻塞,等到有客户端Socket连接new Socket()
            System.out.println("i am server");
            InputStream ips=s.getInputStream();     //有人连上来,打开输入流
            OutputStream ops=s.getOutputStream();   //打开输出流
            ops.write("Hello, Client!".getBytes());  //输出一句话给客户端
            ips.close();          
            ops.close();
            s.close();
            ss.close();
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
    }
}
import java.net.*;
import java.io.*;

public class TcpClient {
    public static void main(String[] args) {
        try {
            Socket s = new Socket(InetAddress.getByName("127.0.0.1"), 8001); //需要服务端先开启,需要目标服务器的IO和端口
            System.out.println("i am client");
            InputStream ips = s.getInputStream();    //开启通道的输入流
            BufferedReader br = new BufferedReader(new InputStreamReader(ips));//包装

            System.out.println("Server said: " + br.readLine());//从服务端读取一句话
            br.close();
            s.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

以上是关于java网络编程基础的主要内容,如果未能解决你的问题,请参考以下文章

JSP编程专题1之JSP基础

Java语言基础之方法的设计

20155307刘浩《网络对抗》逆向及Bof基础

JSP基础

20155311高梓云《网络对抗》逆向及Bof基础

20145301赵嘉鑫《网络对抗》逆向及Bof基础