首页 > 编程语言 > 详细

java网络编程基础

时间:2020-02-28 19:55:52      阅读:49      评论:0      收藏:0      [点我收藏+]

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网络编程基础

原文:https://www.cnblogs.com/innndown/p/12378387.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!