热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

滴水穿石13网络编程

1UPD协议发送和接收1.1基础版packaged13;importjava.net.DatagramPacket;importjava.net.DatagramSocket;

1 UPD协议发送和接收

1.1 基础版

package d13;import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
/** 创建stock对象* 打包数据* 发送数据* 释放数据* */
public class UDP_Send {public static void main(String[] args) throws Exception {//01 创建对象DatagramSocket ds = new DatagramSocket();//02 打包数据 DatagramPacket(byte[] buf, int length, InetAddress address, int port) byte [] contentStr = "Hello Word !!".getBytes();int lengthInt = contentStr.length;InetAddress ip = InetAddress.getByName("192.168.2.117");int portInt = 10086;DatagramPacket dp = new DatagramPacket(contentStr,lengthInt,ip,portInt);//03 发送数据
ds.send(dp);//04 释放资源
ds.close();}}

UDP_Send

package d13;import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
/** 创建stock对象* 创建数据包对象* 接收数据* 解析数据* 释放数据* */
public class UDP_Receive {public static void main(String[] args) throws Exception {//01 创建对象int portInt = 10086;DatagramSocket ds = new DatagramSocket(portInt);//02 打包数据 DatagramPacket(byte[] buf, int length) byte[] buf = new byte[1024];int lengthInt = 1024; DatagramPacket dp = new DatagramPacket(buf,lengthInt);//03 发送数据
ds.receive(dp);//04 解析数据String ip = dp.getAddress().getHostAddress();byte[] contentByte = dp.getData();int len = dp.getLength();String strContent = new String(contentByte,0,len); System.out.println(ip+": "+strContent);//05 释放资源
ds.close();}}

UDP_Receive

1.2 改进版,键盘录入

package d13;import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
/** 创建stock对象* 打包数据* 发送数据* 释放数据* */
public class UDP_Send {public static void main(String[] args) throws Exception {//01 创建对象DatagramSocket ds = new DatagramSocket();//02 打包数据 DatagramPacket(byte[] buf, int length, InetAddress address, int port) BufferedReader br = new BufferedReader(new InputStreamReader(System.in));String line = null;while ((line = br.readLine()) != null) {if ("886".equals(line)) {break;} byte [] contentStr =line.getBytes();int lengthInt = contentStr.length;InetAddress ip = InetAddress.getByName("192.168.2.117");int portInt = 10086;DatagramPacket dp = new DatagramPacket(contentStr,lengthInt,ip,portInt);//03 发送数据
ds.send(dp);}//04 释放资源
ds.close();}}

UDP_Send2.0

 

2 TCP协议发送和接收数据

2.1 基础版

package d13;import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;
/*TCP协议发送数据:* A:创建发送端的Stock* B:获取输出流,写数据* C:释放资源* */
public class TCP_Client {public static void main(String[] args) throws Exception {// A:创建发送端的StockSocket s = new Socket("192.168.2.117",10087);//B:获取输出流,写数据OutputStream os = s.getOutputStream();os.write("Hello Word !!".getBytes());//释放资源
s.close();}}

TCP_Client

package d13;import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;
/**创建服务端的Socket对象*监听客户端连接,返回一个Socket对象*获取输入流 并显示在控制台*释放资源* */
public class TCP_Server {public static void main(String[] args) throws Exception {//创建服务端的Socket对象ServerSocket s = new ServerSocket(10087);//监听客户端连接,返回一个Socket对象Socket ss = s.accept();//获取输入流 并显示在控制台InputStream is = ss.getInputStream();byte [] bys = new byte[1024];int len = is.read(bys);String str = new String(bys,0,len);String ip = ss.getInetAddress().getHostAddress();System.out.println(ip+": "+str);//释放资源
ss.close();}}

TCP_Server

2.2 服务器端收到消息后反馈给客户端

package d13;import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;
/*TCP协议发送数据:* A:创建发送端的Stock* B:获取输出流,写数据* C:释放资源* */
public class TCP_Client {public static void main(String[] args) throws Exception {// A:创建发送端的StockSocket s = new Socket("192.168.2.117",10087);//B:获取输出流,写数据OutputStream os = s.getOutputStream();os.write("Hello Word !!".getBytes());//C 接收服务器端发送来的数据InputStream is = s.getInputStream();byte [] by = new byte[1024];int len = is.read(by);String ms=new String(by,0,len);System.out.println(ms);//释放资源
s.close();}}

TCP_Client

package d13;import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
/**创建服务端的Socket对象*监听客户端连接,返回一个Socket对象*获取输入流 并显示在控制台*释放资源* */
public class TCP_Server {public static void main(String[] args) throws Exception {//创建服务端的Socket对象ServerSocket s = new ServerSocket(10087);//监听客户端连接,返回一个Socket对象Socket ss = s.accept();//获取输入流 并显示在控制台InputStream is = ss.getInputStream();byte [] bys = new byte[1024];int len = is.read(bys);String str = new String(bys,0,len);String ip = ss.getInetAddress().getHostAddress();System.out.println(ip+": "+str);//创建输出流,将消息反馈给客户端OutputStream os = ss.getOutputStream();os.write("信息已收到!!".getBytes());//释放资源
ss.close();}}

TCP_Server

2.3 键盘录入+高效流

package d13;import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.Socket;
import java.net.UnknownHostException;
/*TCP协议发送数据:* A:创建发送端的Stock* B:获取输出流,写数据* C:释放资源* */
public class TCP_Client {public static void main(String[] args) throws Exception {// A:创建发送端的StockSocket s = new Socket("192.168.2.117",10087);//B:获取输出流,写数据OutputStream os = s.getOutputStream();//键盘录入数据BufferedReader br = new BufferedReader(new InputStreamReader(System.in));//把通道内的流给包装一下BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));String line =null;while ((line=br.readLine())!=null) {if ("886".equals(line)) {break;}bw.write(line);bw.newLine();bw.flush();}//释放资源
s.close();}}

TCP_Client

package d13;import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
/**创建服务端的Socket对象*监听客户端连接,返回一个Socket对象*获取输入流 并显示在控制台*释放资源* */
public class TCP_Server {public static void main(String[] args) throws Exception {//创建服务端的Socket对象ServerSocket ss = new ServerSocket(10087);//监听客户端连接,返回一个Socket对象Socket s = ss.accept();//获取输入流 并显示在控制台BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));String line = null;while ((line=br.readLine())!=null) {//String ip = ss.getInetAddress().getHostAddress();System.out.println(line);}//释放资源
s.close();}}

TCP_Server

 2.4 键盘录入+输出到文本文件

package d13;import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.Socket;
/** 客户端键盘录入,服务器输出到文本文件*/
public class TCP_Client2 {public static void main(String[] args) throws IOException {//创建客户端Socket对象Socket s = new Socket("192.168.2.117",23466);//键盘录入BufferedReader br = new BufferedReader (new InputStreamReader(System.in));//封装通道内的数据BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));String line =null;while ((line=br.readLine())!=null) {if ("over".equals(line)) {break;}bw.write(line);bw.newLine();bw.flush();}s.close();}
}

TCP_Client2

package d13;import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;
/** 客户端键盘录入,服务器输出到文本文件*/
public class TCP_Server2 {public static void main(String[] args) throws IOException {//创建服务器Socket对象ServerSocket ss = new ServerSocket(23466);//监听客户端创建Socket s = ss.accept();//从通道中来到文件中去BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));//封装文本文件BufferedWriter bw = new BufferedWriter (new FileWriter("b.txt"));String line = null;while ((line=br.readLine())!=null) {bw.write(line);bw.newLine();bw.flush();}bw.close();}
}

TCP_Server2

2.5 文本文件录入+控制台输出

package d13;import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.IOException;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.Socket;
import java.net.UnknownHostException;
/** 读取文本文件,输出到控制台*/
public class TCP_Client3 {public static void main(String[] args) throws IOException {//创建Socket对象Socket s = new Socket("192.168.2.117",10087);//封装文本文件BufferedReader br = new BufferedReader(new FileReader("b.txt"));//封装通道内的流BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));String line = null;while ((line = br.readLine())!=null) {bw.write(line);bw.newLine();bw.flush(); }br.close();s.close();}
}

TCP_Client3

package d13;import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;
public class TCP_Server3 {public static void main(String[] args) throws IOException {//创建服务器对象ServerSocket ss = new ServerSocket(10087);//监听客户端Socket s = ss.accept();//从通道中来BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));//到控制台String line = null;while ((line=br.readLine())!=null) {System.out.println(line);}s.close();}}

TCP_Server3

2.6 文本文件录入+文本文件输出

package d13;import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.Socket;
import java.net.UnknownHostException;
public class TCP_Client4 {public static void main(String[] args) throws IOException {// 创建Socket对象Socket s = new Socket("192.168.2.117", 10088);// 创建读取流BufferedReader br = new BufferedReader(new FileReader("b.txt"));// 创建文件输出流BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));String line = null;while ((line = br.readLine()) != null) {bw.write(line);bw.newLine();bw.flush();}//Socket通知服务器,已经结束了bw.write("over");s.shutdownOutput();// 接收反馈BufferedReader brclient = new BufferedReader(new InputStreamReader(s.getInputStream()));String msg = brclient.readLine();System.out.println(msg);// 释放资源
br.close();s.close();}}

TCP_Client4

package d13;import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;
public class TCP_Server4 {public static void main(String[] args) throws IOException {//创建服务器对象ServerSocket ss = new ServerSocket(10088);//创建监听Socket s = ss.accept();//从通道中来BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));//到文件中BufferedWriter bw = new BufferedWriter(new FileWriter("a.txt"));String line = null;while ((line=br.readLine())!=null) {bw.write(line);bw.newLine();bw.flush();}//发出成功消息BufferedWriter bwServer = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));bwServer.write("文件上传成功");bwServer.newLine();bwServer.flush();//bwServer.close();//释放资源
bw.close();s.close();}
}

TCP_Server4

 2.7 图片文件录入+图片文件输出

package d13;import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;
//上传图片,并保存
public class TCP_Client5 {public static void main(String[] args) throws IOException {//创建Socket对象Socket s = new Socket("192.168.2.117", 10090);//读取图片图片BufferedInputStream bi = new BufferedInputStream(new FileInputStream("a.png"));byte [] by = new byte[1024];//向通道中写数据BufferedOutputStream bo = new BufferedOutputStream(s.getOutputStream());int len =0;while ((len=bi.read(by))>0) {bo.write(by,0,len); bo.flush();}//通知服务器传输结束
s.shutdownOutput();//结束服务器传来的反馈InputStream biServer = s.getInputStream();len= biServer.read(by);String msg =new String(by,0,len);System.out.println(msg);s.close();}
}

TCP_Client5

package d13;import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class TCP_Server5 {public static void main(String[] args) throws IOException {// 创建服务端SocketServerSocket ss = new ServerSocket(10090);// 监听客户端Socket s = ss.accept();// 从通道中来BufferedInputStream bi = new BufferedInputStream(s.getInputStream());// 到文件中去byte [] by = new byte[1024];BufferedOutputStream bo = new BufferedOutputStream(new FileOutputStream("b.png"));int len =0;while ((len=bi.read(by))!=-1) {bo.write(by,0,len);}//给客户端个反馈OutputStream bs = s.getOutputStream();bs.write("图片上传成功!".getBytes()); bo.close();s.close();}
}

TCP_Server5

 3 一个服务器+多个客户端(多线程)

package d13;import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class TCP_Server5 {public static void main(String[] args) throws IOException {// 创建服务端SocketServerSocket ss = new ServerSocket(10090);while (true) {// 监听客户端Socket s = ss.accept();new Thread(new UserThread(s)).start(); }}
}

TCP_Server5

package d13;import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.net.Socket;
public class UserThread implements Runnable {private Socket s;public UserThread(Socket s) {this.s=s;}@Overridepublic void run() {// TODO Auto-generated method stubtry {// 从通道中来BufferedInputStream bi = new BufferedInputStream(s.getInputStream());// 到文件中去byte [] by = new byte[1024];String newName =System.currentTimeMillis()+".png";BufferedOutputStream bo = new BufferedOutputStream(new FileOutputStream(newName));int len =0;while ((len=bi.read(by))!=-1) {bo.write(by,0,len);}//给客户端个反馈OutputStream bs = s.getOutputStream();bs.write("图片上传成功!".getBytes()); bo.close();s.close();} catch (Exception e) {// TODO: handle exception
}}}

UserThread

package d13;import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;
//上传图片,并保存
public class TCP_Client5 {public static void main(String[] args) throws IOException {//创建Socket对象Socket s = new Socket("192.168.2.117", 10090);//读取图片图片BufferedInputStream bi = new BufferedInputStream(new FileInputStream("a.png"));byte [] by = new byte[1024];//向通道中写数据BufferedOutputStream bo = new BufferedOutputStream(s.getOutputStream());int len =0;while ((len=bi.read(by))>0) {bo.write(by,0,len); bo.flush();}//通知服务器传输结束
s.shutdownOutput();//结束服务器传来的反馈InputStream biServer = s.getInputStream();len= biServer.read(by);String msg =new String(by,0,len);System.out.println(msg);s.close();}
}

TCP_Client5

 

转:https://www.cnblogs.com/YK2012/p/8732748.html



推荐阅读
  • 本文介绍了Swing组件的用法,重点讲解了图标接口的定义和创建方法。图标接口用来将图标与各种组件相关联,可以是简单的绘画或使用磁盘上的GIF格式图像。文章详细介绍了图标接口的属性和绘制方法,并给出了一个菱形图标的实现示例。该示例可以配置图标的尺寸、颜色和填充状态。 ... [详细]
  • 个人学习使用:谨慎参考1Client类importcom.thoughtworks.gauge.Step;importcom.thoughtworks.gauge.T ... [详细]
  • 纠正网上的错误:自定义一个类叫java.lang.System/String的方法
    本文纠正了网上关于自定义一个类叫java.lang.System/String的错误答案,并详细解释了为什么这种方法是错误的。作者指出,虽然双亲委托机制确实可以阻止自定义的System类被加载,但通过自定义一个特殊的类加载器,可以绕过双亲委托机制,达到自定义System类的目的。作者呼吁读者对网上的内容持怀疑态度,并带着问题来阅读文章。 ... [详细]
  • Java太阳系小游戏分析和源码详解
    本文介绍了一个基于Java的太阳系小游戏的分析和源码详解。通过对面向对象的知识的学习和实践,作者实现了太阳系各行星绕太阳转的效果。文章详细介绍了游戏的设计思路和源码结构,包括工具类、常量、图片加载、面板等。通过这个小游戏的制作,读者可以巩固和应用所学的知识,如类的继承、方法的重载与重写、多态和封装等。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • http:my.oschina.netleejun2005blog136820刚看到群里又有同学在说HTTP协议下的Get请求参数长度是有大小限制的,最大不能超过XX ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • 前景:当UI一个查询条件为多项选择,或录入多个条件的时候,比如查询所有名称里面包含以下动态条件,需要模糊查询里面每一项时比如是这样一个数组条件:newstring[]{兴业银行, ... [详细]
  • Ihavethefollowingonhtml我在html上有以下内容<html><head><scriptsrc..3003_Tes ... [详细]
  • 先看官方文档TheJavaTutorialshavebeenwrittenforJDK8.Examplesandpracticesdescribedinthispagedontta ... [详细]
  • 解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法
    本文介绍了解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法,包括检查location配置是否正确、pass_proxy是否需要加“/”等。同时,还介绍了修改nginx的error.log日志级别为debug,以便查看详细日志信息。 ... [详细]
  • 本文介绍了在处理不规则数据时如何使用Python自动提取文本中的时间日期,包括使用dateutil.parser模块统一日期字符串格式和使用datefinder模块提取日期。同时,还介绍了一段使用正则表达式的代码,可以支持中文日期和一些特殊的时间识别,例如'2012年12月12日'、'3小时前'、'在2012/12/13哈哈'等。 ... [详细]
  • 基于Socket的多个客户端之间的聊天功能实现方法
    本文介绍了基于Socket的多个客户端之间实现聊天功能的方法,包括服务器端的实现和客户端的实现。服务器端通过每个用户的输出流向特定用户发送消息,而客户端通过输入流接收消息。同时,还介绍了相关的实体类和Socket的基本概念。 ... [详细]
author-avatar
mobiledu2502902037
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有