`
Luob.
  • 浏览: 1584918 次
  • 来自: 上海
社区版块
存档分类
最新评论

java之 23天 UDP,TCP练习 (三)

    博客分类:
  • Java
阅读更多
UDP,简单聊天程序


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;

/**
 * 编写一个聊天程序
 *  有收数据的部分,和发送数据的部分
 *  这两部分需要同时执行
 *  那就需要用到多线程技术
 *  一个线程控制收,一个线程控制发.
 *  
 *  因为收和发动作是不一致的,所以需要定义run方法
 *  而且这两个方法需要封装到不同的类中
 */

class Send implements Runnable{
	private DatagramSocket ds;
	Send(DatagramSocket ds){
		this.ds=ds;
	}
	
	public void run(){
		try {
			BufferedReader bufr=new BufferedReader(new InputStreamReader(System.in));
			
			String line=null;
			while((line=bufr.readLine())!=null){
				if("886".equals(line))
					break;
				byte[] buf=line.getBytes();
				DatagramPacket dp=new DatagramPacket(buf,buf.length,InetAddress.getByName("192.168.1.121"),10000);
				
				ds.send(dp);
			}
			ds.close();
		} catch (IOException e) {
			throw new RuntimeException("发送端失败!");
		}
		
	}
	
}
class Rece implements Runnable{
	private DatagramSocket ds;
	Rece(DatagramSocket ds){
		this.ds=ds;
	}
	
	public void run(){
		try {
			
			while(true){
				byte[]buf=new byte[1024];
				DatagramPacket dp=new DatagramPacket(buf,buf.length);
				ds.receive(dp);
				
				String ip=dp.getAddress().getHostAddress();
				String data=new String(dp.getData(),0,dp.getLength());
				
				System.out.println(ip+"::"+data);
			}
		} catch (IOException e) {
			throw new RuntimeException("接受失败!");
		}
	}
}


public class Chatdemo {

	public static void main(String[] args) throws SocketException {
		
		DatagramSocket sendSocket=new DatagramSocket();
		DatagramSocket receSocket=new DatagramSocket(10000);
		
		new Thread(new Send(sendSocket)).start();
		new Thread(new Rece(receSocket)).start();

	}

}


TCP,上传文件到服务端

import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;

/**
 * 将客户端的一个文件复制到服务端
 *
 * 必须加入结束标记:否则 程序 都会 等着 
 * 1.第一种:加入自定义标记  "over" : 不靠谱, 容易传输的数据 重复,这样 造成服务端 提前结束 
 * 2.加入 时间戳  客户端 在开始传输数据的时候,首先就传输一个时间戳 ,作为标记;(发现 流对象 用的特别多)
 * 3.标准方式: socket 的 shutdownOutput() shutdowninput()
 */
class TextClient{
	
	public static void main(String[] args) throws IOException{
		
		Socket s=new Socket("192.168.1.121",1000);

		/*//方法二: 时间戳
		DataOutputStream dos=new DataOutputStream(s.getOutputStream());
		long time=System.currentTimeMillis();
		dos.writeLong(time);*/
		
		BufferedReader bufr=new BufferedReader(new FileReader("E:\\workspace4\\exam\\src\\com\\itheima\\day23\\TcpDemo3.java"));
		
		PrintWriter out=new PrintWriter(s.getOutputStream(),true);
		//out.println(time+""); 方法二: 这样也行
		
		String line=null;
		while((line=bufr.readLine())!=null){
			out.println(line);
		}	
		/*//方法一:   由于没有结束标记 最后 两个程序 "都等着了"  容易和文本中的数据重复 如果文本中有 over呢 这样 服务器端就会提前 结束,并发生 "上传成功"
		out.println("over"); 
		//out.println(time+""); 方法二: 这样也行
		//方法二: 时间戳
		dos.writeLong(time);*/
		
		//方法三:
		s.shutdownOutput();// 关闭客户端的额输出信息 服务端不用做什么 ,会自动识别 客户端 已经输出完毕.
		
		BufferedReader bufs=new BufferedReader(new InputStreamReader(s.getInputStream()));
		String str=bufs.readLine();
		System.out.println(str);
		bufr.close();
		
		//dos.close();
		
		s.close();
	}
	
}

class TextServer{
	public static void main(String[] args) throws IOException{
		ServerSocket ss=new ServerSocket(1000);
		Socket s=ss.accept();
		
		String ip=s.getInetAddress().getHostAddress();
		System.out.println(ip+"..connected");
		/*	
		//方法二: 开始前就读取 客户端发送过来的标记
		DataInputStream dis=new DataInputStream(s.getInputStream());
		long time=dis.readLong();
		*/
		BufferedReader bufr=new BufferedReader(new InputStreamReader(s.getInputStream()));
		
		PrintWriter outf=new PrintWriter(new FileWriter("E:\\server.txt"),true);
		
		String line=null;
		while((line=bufr.readLine())!=null){
			/*if("over".equals(line))  //方法一:   加入标记后就 可以跳出了 "等待了" 发现这种标记容易重复
				break;
			if(String.valueOf(time).equals(line))  //方法二: 标记
				break;  */
			
			outf.println(line);
		}
		
		PrintWriter out=new PrintWriter(s.getOutputStream(),true);
		out.println("上传成功");
	
		outf.close();
		s.close();
		
	}
	
}


0
1
分享到:
评论

相关推荐

    java读写Modbus TCP UDP数据,java与modbus通信,Modbus TCP UDP与java通信 全开源

    java读写Modbus TCP UDP数据,java与modbus通信,Modbus TCP UDP与java通信 全开源 这是一个能正常通过Modbus TCP UDP协议读写项目 请放心下载,完全开源,在多个项目中已经使用

    Java版聊天程序(UDP TCP 多线程)

    【标题】:“Java版聊天程序(UDP TCP 多线程)” 这个项目是一个基于Java编程语言实现的聊天程序,它涵盖了网络通信中的两种主要协议——用户数据报协议(UDP)和传输控制协议(TCP),同时利用了多线程技术来提高...

    Java使用TCP和UDP传输文件的源代码

    本资源是使用 java,分别用 TCP 和 UDP 传输文件的源代码。读者朋友可以下载下来,参考着满足自己的需求。 另有博客《Java 使用 TCP 和 UDP 传输文件》可以参考,地址是:...

    Java TCP和 UDP测试代码

    Java作为一门广泛使用的编程语言,提供了丰富的API来支持TCP(Transmission Control Protocol)和UDP(User Datagram Protocol)这两种主要的网络通信协议。下面我们将深入探讨Java如何实现TCP和UDP的测试代码,以及...

    JAVA TCP和UDP Socket通信框架

    Java中的TCP和UDP Socket通信是网络编程的基础,用于在不同设备之间建立可靠的数据传输通道。TCP(Transmission Control Protocol)提供的是面向连接、有序且无损的服务,而UDP(User Datagram Protocol)则是无连接...

    java用netty写udp与tcp.pdf

    Java 用 Netty 写 UDP 与 TCP Netty 是由 JBOSS 提供的一个 Java 开源框架,提供异步的、事件驱动的网络应用程序框架和工具,用以快速开发高性能、高可靠性的网络服务器和客户端程序。Netty 是一个基于 NIO 的客户...

    java tcp/udp

    用Java编写的一个聊天程序,通信部分大部分是UDP通信

    java实现的tcpudp通信

    ### Java 实现 TCP/UDP 通信详解 #### 实验背景及意义 随着互联网技术的不断发展,网络编程成为了软件开发中不可或缺的一部分。TCP/IP 协议作为互联网的基础协议,其重要性不言而喻。Java 作为一种广泛应用的编程...

    基于java socket使用tcp udp进行简易控制台命令与文件传输

    2) 基于Java Socket TCP和UDP实现一个简易的网络文件服务程序,包含服务器端FileServer和客户端FileClient; 3) 服务器端启动时需传递root目录参数,并校验该目录是否有效; 4) 服务器启动后,开启TCP:2021端口,...

    java udp and tcp

    ### Java UDP 和 TCP 详细介绍及实现步骤 #### 一、UDP (User Datagram Protocol) ##### 1.1 UDP 概述 UDP(用户数据报协议)是一种无连接的通讯协议,这意味着它并不像TCP那样需要先建立连接再进行数据传输。在...

    TCP\UDP 服务端练习

    在这个“TCP\UDP 服务端练习”中,你将有机会深入理解这两种协议的工作原理并实践如何在C#中实现客户端和服务端的通信。 TCP是一种面向连接的、可靠的协议。它通过建立三次握手的连接来确保数据传输的可靠性,并且...

    java-tcp-udp编程

    Java是世界上最流行的编程语言之一,尤其在服务器端和网络编程领域有着广泛的应用。TCP(传输控制协议)和UDP(用户数据报协议)是网络通信中的两种主要协议,它们各有特点,适应不同的应用场景。本篇文章将深入探讨...

    UDP tcp测试工具

    标题中的“UDP tcp测试工具”指的是用于检验和调试UDP(用户数据报协议)和TCP(传输控制协议)应用程序的软件工具。这些工具在开发网络通信软件时尤其重要,因为它们帮助开发者验证数据的正确传输、连接的稳定性...

    tcp_udp_socket.zip_Java TCP/UDP_java Tcp _java socket _java tcp

    在IT行业中,网络编程是不可或缺的一部分,特别是在Java开发中,TCP和UDP协议是网络通信的基础。本实验项目“tcp_udp_socket.zip”旨在帮助开发者理解如何使用Java实现TCP和UDP的Socket通信。以下将详细讲解这两个...

    tcp-udp.zip_java socket udp_java tcp udp

    本篇将深入探讨如何在Java环境中使用Socket进行TCP和UDP的文件传输。 TCP是一种面向连接的、可靠的传输协议,它通过三次握手建立连接,并确保数据包按顺序到达,如果数据包丢失,TCP会自动重传。在Java中,我们可以...

    java实现TCP+UDP通信

    在IT行业中,网络通信是至关重要的一个领域,Java作为一门广泛应用的编程语言,提供了丰富的API来支持TCP(传输控制协议)和UDP(用户数据报协议)这两种不同的网络通信方式。本篇文章将深入探讨如何使用Java实现TCP...

    Socket_TCP_UDP.rar_java socket tcp udp_java socket 协议_java tcp u

    Socket编程是Java中用于网络通信的核心技术,它涵盖了TCP(传输控制协议)和UDP(用户数据报协议)两种主要的互联网协议。TCP是一种面向连接的、可靠的、基于字节流的传输层通信协议,而UDP则是一种无连接的、不可靠...

    udp tcp端口测试工具

    UDP(User Datagram Protocol)和TCP(Transmission Control Protocol)是互联网协议族中的两种主要传输协议,它们在计算机网络通信中扮演着至关重要的角色。本篇文章将详细介绍这两种协议以及相关的端口测试工具。 ...

    java多线程实现TCP连接UDP聊天的聊天程序

    java多线程实现TCP连接UDP聊天的聊天程序

    JAVA 实现TCP和UDP的DEMO源码

    在Java编程语言中,TCP(传输控制协议)和UDP(用户数据报协议)是两种主要的网络通信协议,用于在互联网上实现数据的可靠传输。本文将深入探讨这两种协议的基本概念,以及如何使用纯Java来实现TCP和UDP的示例代码。...

Global site tag (gtag.js) - Google Analytics