Day 23

08 Udp接收端
09 Udp键盘录入数据方式
10 Udp聊天
11 TCP传输
12 TCP传输2
13 TCP练习
14 TCP复制文件

08 Udp接收端

需求:
定义一个应用程序,用于接收udp协议传输的数据并处理。

思路:
1.定义UdpSocket服务。
2.定义一个数据报包,因为要存储接收到的字节数据,
而数据报包对象中有更多的功能可以提取字节数据中不同的数据信息。
3.通过socket服务的receive方法将接收到的数据存入已经定义好的数据报包中。
4.通过数据报包对象的特有功能。将这些不同的数据取出,打印在控制台上。
5.关闭资源。

 import java.net.*;
public class UdpReceive
{
public static void main(String[] args)
{
try
{
//1.创建Udp Socket,建立端点
DatagramSocket ds=new DatagramSocket(10000); //2.定义数据报包,用来存储数据
byte[] buf=new byte[1024];
DatagramPacket dp=new DatagramPacket(buf,buf.length); //3.通过Socket服务的receive方法接收到的数据存入数据包
ds.receive(dp); //通过数据报包中的方法获取其中的数据
String ip=dp.getAddress().getHostAddress();
String data=new String(dp.getData(),0,dp.getLength());
int port=dp.getPort(); System.out.println(ip+"::"+data+"::"+port);
//关闭资源
ds.close(); }
catch (Exception e)
{
e.printStackTrace();
} }
}

09 Udp键盘录入数据方式

read和receive都是阻塞式方法,如果接收不到数据,就会等待。

java.net包和java.io包通常一起使用。

测试程序如下:

 public class UdpSend2
{
public static void main(String[] args) throws IOException
{
DatagramSocket ds=new DatagramSocket(10001);
BufferedReader bufr=
new BufferedReader(new InputStreamReader(System.in));
String line=null;
while((line=bufr.readLine())!=null)
{
byte[] buf=line.getBytes(); DatagramPacket dp=new DatagramPacket(buf,buf.length,InetAddress.getLocalHost(),10000);
ds.send(dp);
}
ds.close();
}
}
 import java.net.*;
import java.io.*;
public class UdpReceived2
{
public static void main(String[] args) throws Exception
{
DatagramSocket ds=new DatagramSocket(10000);
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(buf,0,dp.getLength());
System.out.println(ip+"::"+data);
} }
}

10 Udp聊天

实现简单的聊天功能,以ip地址辨别不同身份。

 /*
聊天
*/
import java.net.*;
import java.io.*;
class Send implements Runnable
{
private DatagramSocket s;
public Send(DatagramSocket s)
{
this.s=s;
}
public void run()
{
try
{
BufferedReader br=
new BufferedReader(new InputStreamReader(System.in));
String line=null;
while((line=br.readLine())!=null)
{
if("over".equals(line))
break;
byte[] buf=line.getBytes();
DatagramPacket dp=
new DatagramPacket(buf,buf.length,InetAddress.getByName("172.29.115.1"),10005);
s.send(dp); }
}
catch (Exception e)
{
throw new RuntimeException("发送端失败!"); }
}
}
class Receive implements Runnable
{
private DatagramSocket s;
public Receive(DatagramSocket s)
{
this.s=s;
}
public void run()
{
try
{
while(true)
{
byte[] buf=new byte[1024];
DatagramPacket dp=new DatagramPacket(buf,buf.length);
s.receive(dp);
String ip=dp.getAddress().getHostAddress();
String data=new String(dp.getData(),0,dp.getLength());
System.out.println(ip+"::"+data); }
}
catch (Exception e)
{
throw new RuntimeException("接受端失败!"); }
}
}
public class ChatDemo
{
public static void main(String[] args)throws Exception
{
DatagramSocket send=new DatagramSocket();
DatagramSocket rece=new DatagramSocket(10005); new Thread(new Send(send)).start();
new Thread(new Receive(rece)).start();
} }

11 TCP传输

TCP传输
Socket和ServerSocket
建立客户端和服务器端
建立连接后,通过Socket中的IO流进行数据传输
关闭Socket
同样,服务器端和客户端是两个独立的应用程序。

 /*
需求:给服务器端发送一个文本数据
步骤:
1.创建Socket服务,并指定要连接的主机和端口
*/
import java.net.*;
import java.io.*;
class TcpClient
{
public static void main(String[] args)
{
try
{
//创建客户端的Socket服务,指定目的主机和端口
Socket s=new Socket("127.0.0.1",10000); //为了发送数据,应该获取Socket中的输出流。
OutputStream out=s.getOutputStream(); out.write("hahaha".getBytes());
s.close(); }
catch (Exception e)
{
throw new RuntimeException("客户端建立失败!");
} }
}
/*
需求:定义端点接收数据并打印在控制台。
服务端:
1.建立服务端的socket服务,ServerSocket();
并监听一个端口
2.获取连接过来的客户端对象。
通过ServerSocket的accept方法。
没有连接,就一直等待,所以这是一个阻塞式方法。
3.客户端如果发送来数据,那么服务端要使用对应的客户端对象,并获取到该客户端
对象的读取流来读取发过来的数据。
4.关闭服务端。
*/
class TcpServer
{
public static void main(String[] args)
{
try
{
ServerSocket ss=new ServerSocket(10000);
Socket s=ss.accept();
String ip=s.getInetAddress().getHostAddress(); InputStream in=s.getInputStream();
byte[] buf=new byte[1024];
int len=in.read(buf);
System.out.print(ip+":");
System.out.println(new String(buf,0,len)); s.close(); }
catch (Exception e)
{
throw new RuntimeException("服务端建立失败!");
} }
}

12 TCP传输2

演示tcp的传输的客户端和服务端的互访
需求:客户端给服务端发送数据,服务端收到后,给客户端反馈信息。

客户端:
1.建立socket服务。指定要连接主机和端口。
2.获取socket流中的输出流。将数据写到该流中,通过网络发送给服务端。
3.获取socket流中的输入流,将服务器反馈的数据获取到,并打印。
4.关闭客户端。

 import java.net.*;
import java.io.*;
class TcpClient2
{
public static void main(String[] args)
{
try
{
Socket s=new Socket("172.29.115.1",10000);
OutputStream os=s.getOutputStream();
os.write("你好啊,服务端!".getBytes()); byte[] buf=new byte[1024];
InputStream is=s.getInputStream();
int len=is.read(buf);
System.out.println(new String(buf,0,len));
s.close();
}
catch (Exception e)
{
throw new RuntimeException("客户端建立失败!");
} }
}
class TcpServer2
{
public static void main(String[] args)
{
try
{
ServerSocket ss=new ServerSocket(10000);
Socket s=ss.accept(); InputStream is=s.getInputStream();
byte[] buf=new byte[1024];
int len=is.read(buf);
System.out.println(s.getInetAddress().getHostAddress()+"::"+new String(buf,0,len)); OutputStream os=s.getOutputStream();
os.write("你也好,欢迎光临!".getBytes()); s.close();
ss.close(); }
catch (Exception e)
{
throw new RuntimeException("服务端建立失败!");
}
}
}

13 TCP练习

需求:建立一个文本形式转换服务器。
客户端给服务端发送文本,服务端会将文本转换成大写再返回给服务端。
而且,客户端可以不断地进行文本发送,当客户端输入over时,转换结束。

分析:
客户端:
既然是操作设备上的数据,那么就可以使用io技术,并且按照io的操作规律来思考。
源:键盘录入
目的:网络设备,网络输出流
而且操作的是文本数据,可以选择字符流。

步骤:
1.建立服务
2.获取键盘录入
3.将数据发送给服务端
4.接受服务端返回的大写数据
5.结束,关闭资源。

 import java.net.*;
import java.io.*;
class TransClient
{
public static void main(String[] args) throws Exception
{
//建立socket服务
Socket s=new Socket("172.29.115.1",10000);
//获取键盘录入
BufferedReader bufr=
new BufferedReader(new InputStreamReader(System.in));
//向服务端发送数据
BufferedWriter bufOut=
new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
String line=null;
//接受服务端返回的数据
BufferedReader bufIn=
new BufferedReader(new InputStreamReader(s.getInputStream()));
while((line=bufr.readLine())!=null)
{
if("over".equals(line))
break;
bufOut.write(line);
bufOut.newLine();
bufOut.flush(); String str=bufIn.readLine();
System.out.println("server:"+str); }
bufr.close();
s.close(); }
}
class TransServer
{
public static void main(String[] args) throws Exception
{
//建立服务
ServerSocket ss=new ServerSocket(10000);
Socket s=ss.accept(); //接受客户端的数据
BufferedReader bufIn=new BufferedReader(new InputStreamReader(s.getInputStream())); //返回给客户端大写的文本
BufferedWriter bufOut=new BufferedWriter(new OutputStreamWriter(s.getOutputStream())); String line=null; while((line=bufIn.readLine())!=null)
{
System.out.println(line);
bufOut.write(line.toUpperCase());
bufOut.newLine();
bufOut.flush();
} ss.close(); }
}

14 TCP复制文件

从客户端向服务端上传文件。

 import java.net.*;
import java.io.*;
class TextClient
{
public static void main(String[] args) throws Exception
{
Socket s=new Socket("127.0.0.1",10006);
BufferedReader bufr=
new BufferedReader(new FileReader("ChatDemo.java"));
PrintWriter out=new PrintWriter(s.getOutputStream(),true);
String line=null;
while((line=bufr.readLine())!=null)
{
out.println(line);
}
s.shutdownOutput();
BufferedReader bufIn=new BufferedReader(new InputStreamReader(s.getInputStream()));
String str=bufIn.readLine();
System.out.println("server:"+str);
bufr.close();
s.close(); }
}
class TextServer
{
public static void main(String[] args) throws Exception
{
ServerSocket ss=new ServerSocket(10006);
Socket s=ss.accept();
System.out.println(s.getInetAddress().getHostAddress()+"....connected");
BufferedReader bufIn=
new BufferedReader(new InputStreamReader(s.getInputStream()));
PrintWriter out=new PrintWriter(new FileWriter("server.txt"),true);
String line=null;
while((line=bufIn.readLine())!=null)
{
out.println(line); }
PrintWriter pw=new PrintWriter(s.getOutputStream(),true);
pw.println("上传成功!"); s.close();
ss.close();
out.close(); }
}

网络编程2--毕向东java基础教程视频学习笔记的更多相关文章

  1. 多线程--毕向东java基础教程视频学习笔记

    目录 1.多线程运行的安全问题 2.多线程同步代码块 3.同步方法的锁是this 4.静态同步方法的锁是Class对象 5.单例设计模式(面试中的考点) 6.死锁(一个发生死锁的例子) 多线程运行的安 ...

  2. 网络编程1--毕向东java基础教程视频学习笔记

    目录: 01 网络编程概述1 02 网络编程概述2 03网络编程 网络模型 04网络编程 IP地址 05网络编程 TCP和UDP 06网络编程 Socket 07网络编程 UDP发送端 01 网络编程 ...

  3. 网络编程4--毕向东java基础教程视频学习笔记

    Day24 06 自定义浏览器-Tomcat服务端07 自定义图形界面浏览器-Tomcat服务端08 URL-URLConnection09 小知识点10 域名解析 06 自定义浏览器-Tomcat服 ...

  4. 网络编程3--毕向东java基础教程视频学习笔记

    Day24 01 TCP上传图片02 客户端并发上传图片03 客户端并发登录04 浏览器客户端-自定义服务端05 浏览器客户端-Tomcat服务端 01 TCP上传图片 import java.net ...

  5. IO流05--毕向东JAVA基础教程视频学习笔记

    Day20 10 创建java文件列表11 Properties简述12 Properties存取13 Properties存取配置文件14 Properties练习15 PrintWriter16 ...

  6. IO流04--毕向东JAVA基础教程视频学习笔记

    Day20 01 File概述02 File对象功能-创建和删除03 File对象功能-判断04 File对象功能-获取05 File对象功能-文件列表106 File对象功能-文件列表207 列出目 ...

  7. IO流01--毕向东JAVA基础教程视频学习笔记

    提要 01 IO流(BufferedWriter)02 IO流(BufferedReader)03 IO流(通过缓冲区复制文本文件)04 IO流(readLine的原理)05 IO流(MyBuffer ...

  8. 集合3--毕向东java基础教程视频学习笔记

    Day 15 集合框架01 TreeSet02 TreeSet存储自定义对象03 二叉树04 实现Comparator方式排序05 TreeSet练习06 泛型概述07 泛型使用08 泛型类09 泛型 ...

  9. 集合2--毕向东java基础教程视频学习笔记

    Day14 08 LinkedList09 LinkedList练习10 ArrayList练习11 ArrayList练习2 12 HashSet13 HashSet存储自定义对象14 HashSe ...

随机推荐

  1. LINQ TO SQL 大全

    最近悟出来一个道理,在这儿分享给大家:学历代表你的过去,能力代表你的现在,学习代表你的将来. 十年河东十年河西,莫欺少年穷 学无止境,精益求精 LINQ to SQL语句(1)之Where 适用场景: ...

  2. 【处理手记】Configuration system failed to initialize异常的另类原因

    有个c#程序在某台电脑上,执行某个操作时,总是会报如图错误: 度娘一番,发现市面上常见的原因是配置文件中的特定节点的位置不对,或者配置文件损坏等等,而这个程序根本没有使用内置的配置文件方案,而是用的i ...

  3. C#编程总结(十二)断点续传

    C#编程总结(十二)断点续传 我们经常使用下载工具,如bit精灵.迅雷.FlashGet,这些软件都支持断点续传. 断点续传即下载任务暂停后可以继续,而无需重新下载,即下载时需要通知服务器的起始位置. ...

  4. CodeSnippet.info 开源说明 和 环境搭建 (第一版)

    Github开源声明 本网站的代码开源,开源的目的如下 技术分享 希望业内同行贡献代码 希望能够让网站更加安全 开源地址: CodeSnippet开源地址 关于代码贡献 任何人都可以贡献代码,一般在 ...

  5. Android使用SAX解析XML(5)

    parse_handler.java文件: package com.hzhi.my_sax; import org.xml.sax.Attributes; import org.xml.sax.SAX ...

  6. maven安装与配置(第一天学习笔记)

    Maven下载:http://maven.apache.org/ 1.首先要确保JDK已经安装与配置(注意:用的是apache-maven-3.3.3的JDK1.6不行,我用的是JDK1.8) 2.把 ...

  7. GitHub上新建或删除仓库Repository

    一:新建仓库 在首页的New Repository,点击进入页面,输入和项目同名的仓库名就可以了.

  8. MYSQL 练习

    导出现有数据库数据: mysqldump -u用户名 -p密码 数据库名称 >导出文件路径           # 结构+数据 mysqldump -u用户名 -p密码 -d 数据库名称 > ...

  9. Python多线程学习

    一.Python中的线程使用: Python中使用线程有两种方式:函数或者用类来包装线程对象. 1.  函数式:调用thread模块中的start_new_thread()函数来产生新线程.如下例: ...

  10. Atom 备份神器 —— Sync Settings

    当 Atom 的扩展越装越多,配置也越来越偏离了系统默认设置时,一旦电脑重装后需要复原开发环境,这将是一件比较头疼的事,但今天发现一个扩展,可以解决这一问题,那就是「Sync Settings」,根据 ...