网络通讯要素及UDP、TCP协议

网络通讯要素

1.IP地址
网络中的设备标识
不易记忆,可用主机名
本地回环地址:127.0.0.1 主机名:localhost
2.端口号
用于标识进程的逻辑地址,不同进程的标识
有效端口:0~65535,其中0!1024系统使用或保留端口
3.传输协议
通讯协议
常见协议:TCP UDP

UDP

将数据及源和目的封装在数据包中,不需要建立连接
每个数据包的大小限制在64k内
因无连接,是不可靠协议
不需要建立连接,速度快

通过UDP协议发送数据:

package 网络编程;

import java.io.*;
import java.net.*;
public class UDP发送数据 {
public static void main(String[] args) throws IOException {
     //创建UDP服务
    DatagramSocket p=new DatagramSocket();
    //括号内可指定发送端的端口数字标识
    BufferedReader buf = new BufferedReader(new InputStreamReader(System.in));
    //创建流通道来将数据输入到缓冲区中
    String line=null;
    while((line=buf.readLine())!=null){
        if("886".equals(line)){
            break;
        }
        byte []s=line.getBytes();
        //创建包来封装源和目的
        DatagramPacket q = new  DatagramPacket(s,s.length,      InetAddress.getByName("192.168.255.1"),10000);
        //将数据写到包中并发送
        p.send(q);
    }
    p.close();
}
}

通过UDP协议接收数据:

package 网络编程;
import java.net.*;
public class UDP接收数据 {
public static void main(String[] args) throws Exception {
        创建套接字用来接收数据
        DatagramSocket m=new DatagramSocket(10000);
        
        while (true){
        byte[] bytes1 = new byte[1024];
        //此时最大为1024*8,因为UDP传输协议的限定
        DatagramPacket n = new DatagramPacket(bytes1, bytes1.length);
       //创建数据包接收数据
        m.receive(n);
        //将数据写入包中
        String ip = n.getAddress().getHostAddress();
        System.out.println(ip);
        int port = n.getPort();
        //打印发送端的端口
        System.out.println(port);
        String data = new String(bytes1, 0, bytes1.length);
        System.out.println(data);
    }
}

}

TCP

建立连接。形成传输数据的通道
在连接中进行大数据的传输
通过三次握手完成连接,是可靠协议
必须建立连接,效率会稍低

TCP协议发送数据:

package 网络编程;
import java.io.*;
import java.net.Socket;

public class File客户端 {
public static void main(String[] args) throws IOException {
    Socket s=new Socket("192.168.1.144",10000);
    //创建TCP服务
    BufferedReader bufr=new BufferedReader(new FileReader("Demo.txt"));
    //创建输入流通道指向Demo文件
    PrintWriter pw=new PrintWriter(s.getOutputStream(),true);
    //创建输出流通道指向服务通道
    String line=null;
    while((line=bufr.readLine())!=null){
      pw.println(line);
      //将读取到的文件内容发送给客户端
      //println会自动换行而且会自动刷新缓冲区,若不刷新缓冲区则数据传送不过去
    }
    s.shutdownOutput();
    /*   关闭输出流,给服务端一个读取结束标志-1,若不给提示则会在下边readLine方法阻塞导致客户端无法关闭,
    如果没有此判断挑不出循环不能将上传成功反馈给客户端,两边都会卡死*/
    BufferedReader bufin=new BufferedReader(new InputStreamReader(s.getInputStream()));
    //创建输入流接收来自服务端的反馈
    String str= bufin.readLine();
    System.out.println(str);
    //打印反馈信息
    pw.close();
    //关闭打印流
    s.close();
    //关闭服务流
}
}

TCP协议接收数据:

package 网络编程;

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

public class File服务端 {
public static void main(String[] args) throws IOException {
    ServerSocket s=new ServerSocket(10000);
    //创建服务端
    Socket s1=s.accept();
    //连接客户端
    String ip=s1.getInetAddress().getHostAddress();
    System.out.println(ip+"连接成功");
    //判断是否连接成功
    BufferedReader bufin=new BufferedReader(new InputStreamReader(s1.getInputStream()));
    //创建输入流接收客户端的信息,输入流连向服务通道
    PrintWriter out=new PrintWriter("Demo1.txt");
    //创建输出流并指向Demo.txt文件
    String line=null;
    while((line=bufin.readLine())!=null){
        out.println(line);
        //将客户端发来的信息传送到文件
    }
    PrintWriter out1=new PrintWriter(s1.getOutputStream());
    out1.println("上传成功");
    out.close();
    out1.close();
    s.close();
}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值