java 网络编程

网络模型:

 

网络通信:

需要ip和端口号

ip是网络中计算机的唯一标识;

端口号是计算机中的程序的位置;

传输协议:

TCP协议、CDP协议

TCP:

通信前,需要先建立连接。然后才能发送消息。

它是一种可靠的传输协议,效率低。

通信完毕,断开连接。

就像我们打电话:先要拨通对方的号码,然后才能交流,交流结束后挂断。

UDP:

不需要建立连接,直接发送信息。

信息是以数据报的形式封装的,里面包含:对方的ip,端口号,信息==。

它是一种不可靠的传输协议,效率高。

好比发短信,不管对象是否存在,直接发出去,对方是否收到也不管,信息是否正确也不管。

二者区别:

TCP是面向连接的可靠的传输协议,效率较低。

UDP是无需连接的不可靠的传输协议,效率高。

基于TCP的网络编程:(需要建立连接)

服务器:

//(1)和客户端建立连接

//        启动服务器,指定服务器接收信息的端口号9999
        ServerSocket   server=new ServerSocket(9999);
//        等待接收客户端的连接请求
//        如果没有没有客户端发送连接请求,将阻塞(等待)。
//        一旦接收到客户端请求,返回一个和客户端通信的套接字。
        Socket    s=server.accept();
        System.out.println("--服务器和客户端建立了连接--");

//(2)接收信息

//      使用Socket套接字通信
        InputStream recieve = s.getInputStream();
        byte[]  b=new  byte[1024];
//        read方法阻塞
        int i = recieve.read(b);
        System.out.println(new String(b,0,i));
		recieve.close();


//(3)和客户端断开连接

        s.close();
        server.close();


客户端:

//(1)和服务器建立连接

//       创建一个套接字,向服务器发送连接请求,建立连接。
//        指定服务器的ip:localhost和服务器接收信息的端口号9999
        Socket    c=new Socket("localhost",9999);
        System.out.println("++客户端和服务器建立连接++");


//(2)发送信息

//        使用Socket套接字进行通信
        OutputStream    send=c.getOutputStream();
        send.write("你好啊,服务器!".getBytes());
        send.close();

//(3)和服务器断开连接

        c.close();


基于CDP的网络编程:(无需建立连接)

服务器:

//(1)接收信息

//(2)关闭socket

package com.hs.udp;

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

public class UdpServer {
    public static void main(String[] args) throws IOException {
//      1、接收信息
//      (1)创建一个套接字,指定接收信息的端口是8888
        DatagramSocket    s=new DatagramSocket(8888);

//        (2)准备一个空的数据报
        byte[]   b=new  byte[1024];
        DatagramPacket    p=new DatagramPacket(b,0,b.length);

//        (3)接收信息
//        带有阻塞的方法
        s.receive(p);
        System.out.println(new  String(b));

//        2、关闭socket
        s.close();
    }
}


客户端:

//(1)发送信息

//(2)关闭socket


package com.hs.udp;

import java.io.IOException;
import java.net.*;

public class UdpClient {
    public static void main(String[] args) throws IOException {
//      1、发送信息
//       (1) 创建一个套接字
        DatagramSocket   c=new DatagramSocket();

//        (2)准备一个数据报
        byte[]  b="你好啊,服务器!".getBytes();
//        服务器的地址和端口
        InetAddress   addr=InetAddress.getByName("localhost");
        DatagramPacket   p=new DatagramPacket(b,0,b.length,addr,8888);

//        (3)发送数据报
        c.send(p);

//       2、关闭socket
        c.close();
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值