java TCP & UDP编程

  • UDP编程
  • TCP编程

UDP编程

UPD: User Datagram Protocol。面向无连接,不安全。
UDP中,发送方无需知道接收方是否接受,只考虑将数据通过IP+port发送过去。
此方法简单,经济。
类:DatagramSocket: 数据通讯管道。
方法:send,receive。
类:DatagramPacket:集装箱,用于封装数据,加上目的地(IP+port)

发送方代码

  1. 建立数据通讯通道,
  2. 编写要发送的数据,
  3. 创建集装箱对象,并给其目的地地址。
  4. 将数据送入通道。

后面为发送方作为接收方,接受对方的数据。通道已经建立,只需要创建集装箱对象接收通道中的数据即可。

//发送方
package UDPtest;
import java.io.IOException;
import java.net.*;public class UDPsend {public static void main(String[] args) throws IOException {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("正在发送数据!");ds.send(dp);System.out.println("数据发送完毕!");byte[] by = new byte[1024];DatagramPacket dp2 = new DatagramPacket(by, 1024);System.out.println("端口:" + dp.getPort() + "等待接受数据!");ds.receive(dp2);System.out.println("端口:" + dp.getPort() + "接收数据完毕!");String str2 = new String(dp2.getData() , 0 , dp2.getLength()) + " from " + dp2.getAddress().getHostAddress() + ": " + dp2.getPort();System.out.println(str2);}
}

接收方代码:

  1. 接收方创建的通道需要对应发送方定义的端口(port)。
  2. 然后创建集装箱对象接受即可。
package UDPtest;import java.io.IOException;
import java.net.*;public class UDPreceive {public static void main(String[] args) throws IOException {DatagramSocket ds = new DatagramSocket(3000);byte[] by = new byte[1024];DatagramPacket dp = new DatagramPacket(by, 1024);System.out.println("端口3000: 等待接受数据!");ds.receive(dp);System.out.println("端口3000:已经收到数据!");String str = new String(dp.getData(), 0, dp.getLength()) + " from " + dp.getAddress().getHostAddress() + ": " + dp.getPort();System.out.println(str);String str2 = "HELLO, WORLD!";DatagramPacket dp2 = new DatagramPacket(str2.getBytes(), str2.length(), InetAddress.getByName("127.0.0.1"), dp.getPort());System.out.println("端口:" + dp.getPort() + "正在发送数据!");ds.send(dp2);System.out.println("端口:" + dp.getPort() + "发送数据完毕!");}
}

TCP编程

TCP:Transmission Control Protocol。面向接连的,安全。
TCP编程实现过程:

  1. 服务器:创建一个ServerSocket,等待连接。
  2. 客户机:创建一个Socket,连接到服务器。
  3. 服务器:接收到连接后,创建一个Socket与客户机专线连接。
  4. 服务器的SocketServer继续等待其他客户机连接。

ServerSocket:服务器码头,要在某个端口上。
Socket:运输通道。

客户端需要绑定服务器的端口和地址。
客户端的输出相当于服务端的输入,反正亦然。
服务端每接待一个客户端,都会启动一个线程对应。

例子

  1. 服务器线程创建ServerSocket对象,驻守在8003端口。
  2. 当接受到客户端的请求时,开始启动线程Worker,并为其建立一个专用的通道。
  3. 在Worker中建立数据读写通道,获取通道中的数据。
package UDPtest;//文件放在此包中。
import java.io.EOFException;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;public class TCPTest {public static void main(String[] args) throws IOException {try {ServerSocket s = new ServerSocket(8003);int i = 0; while(true) {Socket ss = s.accept();//等待通道建立。System.out.println("客人" + ++i + "来了");new Thread(new Worker(ss)).start();}}catch(EOFException e) {e.printStackTrace();}}
}//Worker代码
package UDPtest;
import java.net.*;
import java.io.*;class Worker implements Runnable {Socket s;public Worker(Socket s) {this.s = s;}public void run() {try {System.out.println("服务器已启动!");InputStream ips = s.getInputStream();OutputStream ops = s.getOutputStream();BufferedReader br = new BufferedReader(new InputStreamReader(ips));DataOutputStream dos = new DataOutputStream(ops);while (true) {String strWord = br.readLine();System.out.println("    client said:" + strWord +":" + strWord.length());if (strWord.equalsIgnoreCase("quit"))break;String strEcho = strWord + " 666";System.out.println("server said:" + strWord + "---->" + strEcho);dos.writeBytes(strWord + "---->" + strEcho + System.getProperty("line.separator"));}br.close();dos.close();s.close();} catch (Exception e) {e.printStackTrace();}}
}

客户端代码:

  1. 客户端,创建Socket对象,对应服务端的Ip+端口。
  2. 创建相应的输入输出流,来读写数据。
package UDPtest;
import java.io.IOException;
import java.net.*;
import java.io.*;public class Client {public static void main(String[] args) throws UnknownHostException, IOException {Socket s = new Socket(InetAddress.getByName("127.0.0.1"), 8003);InputStream  ips = s.getInputStream();OutputStream ops = s.getOutputStream();BufferedReader brNet = new BufferedReader(new InputStreamReader(ips));DataOutputStream dos = new DataOutputStream(ops);BufferedReader brKey = new BufferedReader(new InputStreamReader(System.in));while(true) {String word = brKey.readLine();if(word.equalsIgnoreCase("exit"))break;else {System.out.println("I wanna send" + word);//写给服务器数据dos.writeBytes(word + System.getProperty("line.separator"));//读取服务器的数据System.out.println("Server said:" + brNet.readLine()); }}}
}

Java TCP/UDP编程相关推荐

  1. java毕业设计——基于java+TCP+UDP的局域网聊天室系统设计与实现(毕业论文+程序源码)——局域网聊天室系统

    基于java+TCP+UDP的局域网聊天室系统设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于java+TCP+UDP的局域网聊天室系统设计与实现,文章末尾附有本毕业设计的论文和源码下载地 ...

  2. TCP/UDP编程中的问题汇总

    TCP/UDP编程中的问题汇总 TCP和UDP发送大文件的问题. 答: 发送端: 发送时,先发送文件的名称及大小等信息. 然后,设置一个缓冲区的大小,假设为4K. 再循环读4K的文件内容,并发送,直到 ...

  3. 原生JAVA的TCP/UDP编程

    一.TCP/UDP对比 二.TCP编程 TCP字节流编程 - Server端: public class TCPServerStream {public static void main(String ...

  4. .Net TCP/UDP 编程 【一】【原创】

    命名空间: using System.Net; using System.Net.Sockets; 关键 : TCP /UDP连接 UDP UDP 与 tCP的主要区别在于 UDP 不一定提供可靠的数 ...

  5. linux下java基于UDP编程聊天_基于Linux下的UDP编程

    一. Linux下UDP编程框架 使用UDP进行程序设计可以分为客户端和服务器端两部分. 1.服务器端程序包括: ? 建立套接字 ? 将套接字地址结构进行绑定 ? 读写数据 ? 关闭套接字 2.客户端 ...

  6. Java TCP/UDP socket 编程流程总结

    最近正好学习了一点用java socket编程的东西.感觉整体的流程虽然不是很繁琐,但是也值得好好总结一下. Socket Socket可以说是一种针对网络的抽象,应用通过它可以来针对网络读写数据.就 ...

  7. socket与TCP/UDP编程-转

    Socket接口是TCP/IP网络的API,Socket接口定义了许多函数或例程,程序员可以用它们来开发TCP/IP网络上的应用程序.要学Internet上的TCP/IP网络编程,必须理解Socket ...

  8. [windows网络编程]tcp/udp编程初步详解-转

    #pragma comment (lib,"ws2_32.lib") #include <Winsock2.h> #include <stdio.h> 如你 ...

  9. TCP/UDP编程基础

    一.Socket 1.TCP/IP 要想理解socket首先得熟悉一下TCP/IP协议族, TCP/IP(Transmission Control Protocol/Internet Protocol ...

最新文章

  1. python xml字符串和dict字典互转
  2. python判断是否为类的实例,是否为子类
  3. 科大星云诗社动态20210426
  4. [Json] C#ConvertJson|List转成Json|对象|集合|DataSet|DataTable|DataReader转成Json (转载)...
  5. 教你买虚拟主机不会受骗的九个方法
  6. Python的turtle库还能绘制这些有趣图形?
  7. pytorch卷积神经网络_知识干货-动手学深度学习(pytorch)-06 卷积神经网络基础
  8. CSS经典书写技巧之(二)
  9. mariadb mysql 5.7_MariaDB 10.1 和 MySQL 5.7 在普通商用硬件上的表现
  10. mysql 分库外置索引,MySQL的分库分表与Innodb的Btree索引
  11. Http和RPC区别
  12. Win7-旗舰版-连接共享打印机时,报 0x00000bcb 错误
  13. Python 网页下载文件
  14. 大学英语计算机统考怎么过,2011年9月大学英语B 统考 计算机网考样题
  15. 笔记本电脑开机后发现突然扫描不到WiFi网络(WiFi列表消失)
  16. 什么是云数据库?这篇文章详细告诉你!
  17. Android模拟键盘输入功能的实现
  18. 社群运营中KOL的作用
  19. 小米的云备份服务器在哪里,用小米手机一定要知道云服务还有这些功能,要不然手机真白买了...
  20. 巧用STM32串口DMA的normal和circular模式,达到并行执行效果

热门文章

  1. NOIP2013NOIP2018USACO 三倍经验铺路题巧妙解法
  2. 在 2017 年将会更加流行的 6 个 Web 开发趋势
  3. MVC+EF 随笔小计——NuGet程序包管理
  4. 上传文件时显示选择窗口
  5. yii学习笔记--url解析
  6. 因 inode 不足导致数据库登陆报错相关问题
  7. 资源丨MySQL故障排查思路方法PPT视频24问答
  8. 19个强大、有趣、又好玩的 Linux 命令!
  9. 18C 也不能避免 SQL 解析的 Bug
  10. 云图说|玩转华为HiLens之端云协同AI开发