网络编程
来源:互联网 发布:双色球一等奖概率算法 编辑:程序博客网 时间:2024/06/07 11:37
实现计算机互联的三要素:
1、IP地址
本机回路IP:127.0.0.1
2、端口号(逻辑端口):用于标识应用程序。
端口号0~65535之间的整数;0~1024之间大部分已被用于一些知名的网络服务和应用,所以现在开发的网络应用程序端口号一般是1024以后的整数。
3、通信协议
TCP:三次握手机制,面向连接,稍慢。可靠
UDP:无连接,每个数据报大小限制在64K内。传输快。不可靠。
TCP/IP参考模型:
网络编程:其实就是Socket编程
通信的两端都有Socket, 数据在两个Socket间通过IO传输。
UDP传输:DatagramSocket和DatagramPacket
UDP通信示例:
class UDPsend { public static void main(String[] args) throws Exception { //创建UDP socket端点,可以指定固定端口发送数据,不指定则系统随机产生 DatagramSocket ds = new DatagramSocket(); //确定数据,并封装成数据包 byte[] buf = "Hello, java".getBytes(); DatagramPacket dp = new DatagramPacket(buf, 0, buf.length, InetAddress.getByName("127.0.0.1"), 8888); //通过UDP socket的sent方法发送数据 ds.send(dp); System.out.println("发送成功"); } } class UDPreceive { public static void main(String[] args) throws Exception { //创建UDP socket端点,指定用于接收数据的端口 DatagramSocket ds = new DatagramSocket(8888); //定义数据包用于接收数据 byte[] buf = new byte[1024]; DatagramPacket dp = new DatagramPacket(buf, 0, buf.length); //接收数据存入于数据包中 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 + ", " + port + ", " + data); ds.close(); } }
实例:用TCP完成一个英文文本大小写转换的客户端和服务器端
客户端发送一个英文字符串到服务端,服务端返回一个将字符串转为全大写后的信息到客户端
import java.net.*; import java.io.*; /* * 建立一个文本转换器 * * 分析:操作的是客户端发来的文本信息数据,所以要用到IO流技术。 * * 步骤: * 1、建立服务 * 2、获取键盘录入 * 3、将数据发给服务端 * 4、服务端将小写字母全部转换为大写后发送给客户端 * 5、关闭资源 * */ public class TCPTextCast { public static void main(String[] args) { } } class TCPClient1 { public static void main(String[] args) throws Exception { Socket s = new Socket("127.0.0.1", 10003); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); BufferedWriter bufOut = new BufferedWriter(new OutputStreamWriter(s.getOutputStream())); //优化:PrintWriter out =new PrintWriter(s.getOutputStream(), true); //将bufOut传入PrintWriter(bufOut)也行 BufferedReader bufIn = new BufferedReader(new InputStreamReader(s.getInputStream())); String line = null; while((line=br.readLine())!= null) { if("over".equals(line)) break; bufOut.write(line); bufOut.newLine(); bufOut.flush(); //三句变一句,用out.println(line); System.out.println("Server: " + bufIn.readLine()); } br.close(); s.close(); } }
TCP实例:
/* * 使用TCP协议写一个可以上传文件的服务器和客户端。 * * 思路:网络编程与IO流相拼命 * 客户端通过socket向其输出流中写入本地文件,用到FileInputStream读取文件,也可加上缓冲BufferedInputStream. * 还有通过socket的输入流读取服务器端的反馈信息。 * 服务端通过socket从其输入流中读取文件,存入到服务器端,并返回文件复制情况信息 * 资源关闭 * */ import java.net.*; import java.io.*; public class FileLoader { public static void main(String[] args) { } } //客户端 class client { public static void main(String[] args) throws Exception { //建立Socket服务 Socket fileLoaderSocket = new Socket("127.0.0.1", 10005); //从客户端本地读取文件,并写入socket的输出流中 OutputStream out = fileLoaderSocket.getOutputStream(); InputStream fileRead = new FileInputStream("G:\\Demo.mp3"); byte[] buf = new byte[1024]; int len = 0; while((len=fileRead.read(buf)) != -1) { out.write(buf, 0, len); } //告诉服务端,文件已传输完毕 fileLoaderSocket.shutdownOutput(); //获取从服务端反馈的信息 BufferedReader in = new BufferedReader(new InputStreamReader(fileLoaderSocket.getInputStream())); String serverBack = in.readLine(); System.out.println(serverBack); //资源关闭 fileLoaderSocket.close(); fileRead.close(); } } //服务端 class Server { public static void main(String[] args) throws Exception { //建立服务端Socket ServerSocket ss = new ServerSocket(10005); //接收客户端Socket Socket fileLoaderSocket = ss.accept(); //打印连接信息 String ip = fileLoaderSocket.getInetAddress().getHostAddress(); System.out.println(ip + "...conncected"); //接收文件,并保存 InputStream in = fileLoaderSocket.getInputStream(); OutputStream fileSave = new FileOutputStream("E:\\server.mp3"); byte[] buf = new byte[1024]; int len = 0; while((len=in.read(buf)) != -1) { fileSave.write(buf, 0, len); fileSave.flush(); } //返回文件复制情况信息 BufferedWriter out = new BufferedWriter(new OutputStreamWriter(fileLoaderSocket.getOutputStream())); out.write("文件上传成功"); out.flush(); //资源关闭 ss.close(); fileLoaderSocket.close(); fileSave.close(); } } class TCPServer1 { public static void main(String[] args) throws Exception { ServerSocket ss = new ServerSocket(10003); Socket s = ss.accept(); String ip = s.getInetAddress().getHostAddress(); System.out.println(ip + "...connceted"); BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream())); BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(s.getOutputStream())); String data = null; while((data=br.readLine()) != null) { System.out.println(ip + "... : " + data); bw.write(data.toUpperCase()); bw.newLine(); bw.flush(); } s.close(); ss.close(); } }
0 0
- 网络编程
- 网络编程
- 网络编程
- 网络编程
- 网络编程
- 网络编程
- 网络编程
- 网络编程
- 网络编程
- 网络编程
- 网络编程
- 网络编程
- 网络编程
- 网络编程
- 网络编程
- 网络编程
- 网络编程
- 网络编程
- Oracel学习笔记(8)----------复杂查询及总结
- mysql6.0 linux安装
- 采购全过程的科目处理
- android Notification简介
- 欢迎使用CSDN-markdown编辑器
- 网络编程
- canvas中颜色合成之globalCompositeOperation属性学习
- 对于动态数据库链接出现undefined reference to `dlclose' 的错误
- GRE写作必备句型
- ecshop 供应商添加搜索功能
- 解决Cannot change version of project facet Dynamic web module to 2.x
- Oracle学习笔记(9)----------- 表的创建及管理
- poi读取EXCEL文件代码
- 2012年5月SAT香港真题解析