Java之TCP和UDP代码实例
来源:互联网 发布:绍兴网络电视台 跃马 编辑:程序博客网 时间:2024/06/05 07:23
UDP
udpsend.java
import java.io.IOException;import java.net.DatagramPacket;import java.net.DatagramSocket;import java.net.InetAddress;/* * 实现UDP协议的发送端: * 实现封装数据的类:java.net.DatagramPacket * 实现数据传输的类:java.net.DatagramSocket * * 实现步骤: * 1.创建DatagramPacket对象,封装数据和接收端的地址和端口 * 2.创建DatagramSocket * 3.调用DatagramSocket类方法send,发送数据包 * 4.关闭资源 * * DatagramPacket构造方法: * DatagramPacket(byte[] buf, int length, InetAddress address, int port) * 构造数据报包,用来将长度为 length 的包发送到指定主机上的指定端口号 * * DatagramSocket构造方法 * DatagramSocket()空参数 * 方法:void send(DatagramPacket p) 从此套接字发送数据报包。 */public class udpsend {public static void main(String[] args) throws IOException {//创建数据包对象,封装要发送的数据包和接收端的IP和端口byte[] date = "你好UDP".getBytes();//创建InetAddress对象,封装自己的IP地址InetAddress inet = InetAddress.getByName("127.0.0.1");DatagramPacket dp = new DatagramPacket(date,date.length,inet,6000);//创建DatagramSocket对象,调用send方法发送数据包DatagramSocket ds = new DatagramSocket();ds.send(dp);ds.close();}}
udpreceive.java
import java.io.IOException;import java.net.DatagramPacket;import java.net.DatagramSocket;import java.net.InetAddress;/* * 实现UDP接收端 * 实现封装数据的类:java.net.DatagramPacket * 实现数据传输的类:java.net.DatagramSocket * * 实现步骤: * 1.创建DatagramSocket对象,绑定一个端口号 * 2.创建一个字节数组,准备接收对方发来的数据 * 3.创建数据包对象DatagramPacket//DatagramPacket(byte[] buf, int length) 构造 DatagramPacket,用来接收长度为 length 的数据包。 * 4.调用DatagramSocket的方法void receive(DatagramPacket p) * 5.拆包 * 发送的IP地址 InetAddress getAddress() 返回某台机器的 IP 地址,此数据报将要发往该机器或者是从该机器接收到的。 * 接收到的字节个数 DatagramPacket 中方法 int getLength() * 发送方的端口号 int getPort() 返回某台远程主机的端口号,此数据报将要发往该主机或者是从该主机接收到的。 * 6.关闭资源 */public class udpreceive {public static void main(String[] args)throws IOException {//创建数据包传输对象DatagramSocket,绑定端口号DatagramSocket ds = new DatagramSocket(6000);byte[] data = new byte[1024];DatagramPacket dp = new DatagramPacket(data,data.length);ds.receive(dp);//获取接收到的字节个数int length = dp.getLength();//获取发送端的IP地址对象String ip = dp.getAddress().getHostAddress();System.out.println(ip);//获取发送端的端口号int port = dp.getPort();System.out.println(port);System.out.println(new String(data,0,length));ds.close();}}
TCP
tcpserver.java
import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.net.ServerSocket;import java.net.Socket;/* * 实现TCP的服务器程序 * 表示服务器程序的类为ServerSocket,在java.net.ServerSocket * ServerSocket的构造方法: * ServerSocket(int port) 创建绑定到特定端口的服务器套接字。 * * 方法: * 必须获得客户端套接字对象Socket * Socket accept() 侦听并接受到此套接字的连接。 * */public class tcpservice {public static void main(String[] args)throws IOException {ServerSocket server = new ServerSocket(8888);//调用服务器套接字对象中的方法accept()获得客户端的套接字对象Socket socket = server.accept();//调用客户端套接字socket的InputStream获取字节输入流,读取的是客户端发送的数据InputStream in = socket.getInputStream();byte[] data = new byte[1024];int len = in.read(data);System.out.println(new String(data,0,len));//服务器向客户端回数据,使用字节输出流,并通过客户端套接字对象获取字节输出流OutputStream out = socket.getOutputStream();out.write("数据已查收".getBytes());socket.close();server.close();}}
tcpclient.java
import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.net.Socket;/* * 实现TCP客户端,连接到服务器端,和服务器端实现数据交换 * 实现TCP客户端的类在java.net.Socket * * Socket构造方法 * Socket(String host, int port)创建一个流套接字并将其连接到指定主机上的指定端口号。 * * Socket方法 * OutputStream getOutputStream() 返回此套接字的输出流。即输出到服务器 * InputStream getInputStream() 返回此套接字的输入流。 即写入到客户端 * 客户端服务器数据交换,必须使用套接字对象Socket中的获取的IO流,自己new的流则不行。 * */public class tcpclient {public static void main(String[] args)throws IOException {//创建Socket对象,连接服务器Socket socket = new Socket("127.0.0.1",8888);//通过客户端套接字对象Socket方法,获取字节输出流,将数据写向服务器OutputStream out = socket.getOutputStream();out.write("服务器OK".getBytes());//客户端读取服务器端回送的数据,同样通过字节输入流将数据读取进来InputStream in = socket.getInputStream();byte[] data = new byte[1024];int len = in.read(data);System.out.println(new String(data,0,len));socket.close();}}
使用TCP上传文件实例
tcpserver.java
import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.net.ServerSocket;import java.net.Socket;import java.util.Random;/* * tcp图片上传服务器 * 1.ServerSocket套接字对象,监听端口8000 * 2.方法accpet()获取客户端的连接对象 * 3.客户端连接对象获取字节输入流,读取客户端发送的图片 * 4.创建Fiel对象,绑定上传文件夹,判断文件夹是否存在, * 5.创建字节输出流,数据目的File对象所在文件夹 * 6.字节流读取图片,字节流将图片写入到目的文件夹 * 7.上传成功写入客户端 * 8.关闭资源 */public class tcpserver {public static void main(String[] args)throws IOException {ServerSocket server = new ServerSocket(8000);Socket socket = server.accept();InputStream in = socket.getInputStream();//将目的文件夹封装到File对象File upload = new File("d:\\upload");if(!upload.exists()){upload.mkdirs();}//为防止文件同名被覆盖,从新定义文件名字//规则:域名+毫秒值+6位随机数String filename = "TCPIP"+System.currentTimeMillis()+ new Random().nextInt()+".jpg"; FileOutputStream fos = new FileOutputStream(upload+File.separator+filename);byte[] bytes = new byte[1024];int len = 0;while((len = in.read(bytes))!=-1){fos.write(bytes,0,len);}socket.getOutputStream().write("上传成功".getBytes());fos.close();socket.close();server.close();}}
tcpclient.java
import java.io.FileInputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.net.Socket;/* * 实现TCP的图片上传客户端 * 实现步骤 * 1.socket套接字连接服务器 * 2.通过socket获取字节输出流传输图片 * 3.使用自己的流对象,读取图片数据源FileInputStream * 4.读取图片,使用字节输出流,将图片写到服务器采用字节数组进行缓冲 * 5.通过socket套接字获取字节输入流,读取服务器发回来的上传成功信息 * 6.关闭资源 */public class tcpclient {public static void main(String[] args)throws IOException {Socket socket = new Socket("127.0.0.1",8000);OutputStream out = socket.getOutputStream();FileInputStream fis = new FileInputStream("C:\\1.jpg");int len = 0;byte[] bytes = new byte[1024];while((len = fis.read(bytes))!=-1){out.write(bytes,0,len);}socket.shutdownOutput();//获取字节数入流读取服务器发回来的上传成功信息InputStream in = socket.getInputStream();len = in.read(bytes);System.out.println(new String(bytes,0,len));socket.close();fis.close();}}
文件上传案例多线程版本
服务器端
import java.io.IOException;import java.net.ServerSocket;import java.net.Socket;public class tcpthreadserver {public static void main(String[] args)throws IOException {ServerSocket server = new ServerSocket(8000);while(true){Socket socket = server.accept();new Thread(new upload(socket)).start();}}}
import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.net.Socket;import java.util.Random;public class upload implements Runnable{private Socket socket;public upload(Socket socket){this.socket=socket;}public void run(){try{InputStream in = socket.getInputStream();//将目的文件夹封装到File对象File upload = new File("d:\\upload");if(!upload.exists()){upload.mkdirs();}//为防止文件同名被覆盖,从新定义文件名字//规则:域名+毫秒值+6位随机数String filename = "TCPIP"+System.currentTimeMillis()+ new Random().nextInt()+".jpg"; FileOutputStream fos = new FileOutputStream(upload+File.separator+filename);byte[] bytes = new byte[1024];int len = 0;while((len = in.read(bytes))!=-1){fos.write(bytes,0,len);}socket.getOutputStream().write("上传成功".getBytes());fos.close();socket.close();}catch(IOException ex){System.out.println(ex);System.out.println("上传失败");}}}
阅读全文
0 0
- Java之TCP和UDP代码实例
- Java 网络编程之TCP和UDP
- Java之网络编程UDP和TCP
- java个人笔记之UDP和TCP
- Java网络之TCP和UDP
- Python进阶之UDP和TCP通信协议实例
- TCP和UDP代码示意
- [心得]Java版UDP和TCP C-S代码
- TCP和UDP之面试
- java网络编程之UDP和TCP的
- 【美乃滋酱学java】UDP和TCP
- java基础---UDP和TCP
- Java TCP和UDP简介
- java中的UDP和TCP
- java中TCP与UDP实例
- JAVA中TCP/UDP编程实例
- JAVA中TCP/UDP编程实例
- Linux下TCP和UDP编程实例
- 微信小程序--官方文档补充【操作反馈】--action-sheet组件
- 51nod 1778 小Q的集合
- 今天是个好日子……吗?
- “玲珑杯”ACM比赛 Round #18
- 几个重要的jquery插件
- Java之TCP和UDP代码实例
- jzoj. 3526. 【NOIP2013模拟11.7A组】不等式(solve)
- SpringMVC关于json、xml自动转换的原理研究[附带源码分析]
- 随机格言生成器(Random Quote Machine)的制作
- Shell实现数字互换和字母大小写互换
- POJ
- 以String为例详解“==”与equals()区别,以及String中重写equals()方法
- uikit——Auto Layout——intrinsic content size
- HDU-Common Subsequence