java_网络编程学习笔记(一)
网络概述
网络模型
IP地址
package cn.wangyu.net;import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.Arrays;import org.junit.Test;/** * @author JiangMinyan** @version 2016/02/19 10:53:30*/
public class NetTest {@Test//测试IP对象public void testInetAddress() throws UnknownHostException{//获取本机信息InetAddress localHost = InetAddress.getLocalHost();sop(localHost);System.out.println("address: " + localHost.getHostAddress());System.out.println("name: " + localHost.getHostName());fengexian();//获取任意主机信息InetAddress ia = InetAddress.getByName("192.168.21.193");sop(ia);System.out.println("address: " + ia.getHostAddress());System.out.println("name: " + ia.getHostName());fengexian();//获取任意淘宝主机信息
// InetAddress baidu = InetAddress.getByName("www.baidu.com");InetAddress[] taobao = InetAddress.getAllByName("www.taobao.com");sop(Arrays.asList(taobao));
// System.out.println("address: " + baidu.getHostAddress());
// System.out.println("name: " + baidu.getHostName());}public void sop(Object obj){System.out.println(obj);}public void fengexian(){System.out.println("-------------------------------");}
}
TCP/UDP
UDP:
Socket
UDP传输
package cn.wangyu.net;import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;/*** @author JiangMinyan* * @version 2016/02/19 14:20:58*/
public class UDPSendSocket {/*** 需求: 通过UDP传输方式,将一段文字数据发送出去 思路: 1,简历UDPsocket服务 2,提供数据,并将数据封装到数据包中* 3,通过socket服务的发送功能,将数据包发送出去 4,关闭资源* * @throws Exception*/public static void main(String[] args) throws Exception {// 1 创建UDP服务,通过DatagramSocket对象DatagramSocket ds = new DatagramSocket(8989);// 2 确定数据,并封装成数据包byte[] buf = "udp ge men lai le ".getBytes();DatagramPacket packet = new DatagramPacket(buf, buf.length, InetAddress.getByName("192.168.21.158"), 7080);// 3 通过socket服务,将封装好的数据包发送出去ds.send(packet);// 4 关闭资源ds.close();}
}
接收方:
package cn.wangyu.net;import java.net.DatagramPacket;
import java.net.DatagramSocket;/*** @author JiangMinyan* * @version 2016/02/19 14:21:54*/
public class UDPReceiveSocket {/*** 需求: 用于接收udp协议传输的数据并处理 思路:* 1,定义udpsocket服务.通常会监听一个端口。其实就是给这个接受网络应用程序定义数字标识。 方便于明确那些数据过来该应用程序可以处理。* 2,定义一个数据包,因为要存储接收到的字节数据。 因为数据包对象中有更多功能可以提取字节数据中不同数据信息* 3,通过socket服务的receive方法将收到的数据存入已定义的数据包中 4,通过数据包对象的特有功能。将这些不同的数据取出。打印在控制台上。* 5,关闭资源* * @throws Exception*/public static void main(String[] args) throws Exception {// 1 创建UDP服务,通过DatagramSocket对象DatagramSocket ds = new DatagramSocket(7080);// 2 定义数据包。用于存储数据byte[] buf = new byte[1024];DatagramPacket packet = new DatagramPacket(buf, buf.length);// 3 通过socket服务的receive方法将收到数据存入到数据包中ds.receive(packet);// 4 通过数据包的方法获取其中的数据String ip = packet.getAddress().getHostAddress();String data = new String(packet.getData(), 0, packet.getLength());int port = packet.getPort();System.out.println(ip + "::" + data + "::" + port);// 5 关闭资源ds.close();}
}
注意:可以开启两个Eclipse程序进行试验 或者开启两个DOS窗口 使用CMD命令。
键盘录入发送方:
package cn.wangyu.net;import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;/*** @author JiangMinyan* * @version 2016/02/19 14:20:58*/
public class UDPSendSocket2 {/*** 需求: 通过UDP传输方式,将一段文字数据发送出去 思路: 1,简历UDPsocket服务 2,提供数据,并将数据封装到数据包中* 3,通过socket服务的发送功能,将数据包发送出去 4,关闭资源* * @throws Exception*/public static void main(String[] args) throws Exception {// 1 创建UDP服务,通过DatagramSocket对象DatagramSocket ds = new DatagramSocket(8989);// 2 确定数据,并封装成数据包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 packet = new DatagramPacket(buf, buf.length, InetAddress.getByName("192.168.21.158"), 7080);// 3 通过socket服务,将封装好的数据包发送出去ds.send(packet);}// 4 关闭资源ds.close();}
}
模仿聊天小程序(UDP)
package cn.wangyu.net;import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;/*** @author JiangMinyan* * @version 2016/02/19 16:18:49*/
public class Send implements Runnable {private DatagramSocket ds;public Send(DatagramSocket ds) {this.ds = ds;}@Overridepublic void run() {System.out.println("send............");try {BufferedReader buff = new BufferedReader(new InputStreamReader(System.in));String line = null;while ((line = buff.readLine()) != null) {if ("886".equals(line)) {break;}byte[] bytes = line.getBytes();DatagramPacket packet = new DatagramPacket(bytes, bytes.length, InetAddress.getByName("192.168.21.158"), 10005);ds.send(packet);}} catch (Exception e) {throw new RuntimeException("发送失败");}}}
Rece类:
package cn.wangyu.net;import java.net.DatagramPacket;
import java.net.DatagramSocket;/*** @author JiangMinyan* * @version 2016/02/19 16:26:33*/
public class Rece implements Runnable {private DatagramSocket ds;public Rece(DatagramSocket ds) {this.ds = ds;}@Overridepublic void run() {System.out.println("rece............");try {while (true) {byte[] buf = new byte[1024];DatagramPacket packet = new DatagramPacket(buf, buf.length);ds.receive(packet);String ip = packet.getAddress().getHostAddress();String data = new String(packet.getData(), 0, packet.getLength());int port = packet.getPort();System.out.println(ip + "::" + data + "::" + port);}} catch (Exception e) {throw new RuntimeException("接收失败");}}}
Chat类:
package cn.wangyu.net;import java.net.DatagramSocket;/** * @author JiangMinyan** @version 2016/02/19 16:31:22*/
public class Chat {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 Rece(rece)).start();}
}
最好把三个文件分别在两台电脑上调式.或者开启两个eclipse改成对应IP。
TCP传输
Socket和ServerSocket
package cn.wangyu.net;import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;/** * @author JiangMinyan** @version 2016/02/22 9:56:24*/
public class TCPClient {/*** 客户端:* 通过查阅socket对象,发现在该对象建立时,就可以去连接指定的主机。* 因为TCP是面向连接的,所以在建立socket服务时,就要有服务端存在* ,并连接成功。形成通路,在该通道进行数据的传输。* * 步骤:* 1 创建socket服务,并指定要连接的主机和端口* @param args*/public static void main(String[] args) throws Exception {//创建客户端socket服务,指定目的主机和端口Socket s = new Socket("192.168.21.158", 10004);//为了发送数据,应该获取socket流中的输出流。OutputStream out = s.getOutputStream();out.write("tcp ge men lai le".getBytes());//获取服务端返回的数据InputStream input = s.getInputStream();byte[] buff = new byte[1024];int len = input.read(buff);System.out.println(new String(buff, 0 , len));s.close();}
}
服务端:
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;/** * @author JiangMinyan** @version 2016/02/22 9:56:38*/
public class TCPServer {/*** 服务端:* 1 建立服务端的socket服务。ServerSocket(),并监听一个端口* 2 获取连接过来的客户端对象,通过ServerSocket的accept方法,没有连接就会等,所以这个方法是阻塞式的。* 3 客户端如果发送过来数据,那么服务端要使用对应的客户端对象,并获取到该客户端对象的读取流来读取发过来的数据,* 并打印在控制台。* 4 关闭服务端(可选)* @param args*/public static void main(String[] args) throws Exception{//建立服务端socket服务,并监听一个端口。ServerSocket server = new ServerSocket(10004);//通过accept方法获取连接过来的客户端对象Socket socket = server.accept();String ip = socket.getInetAddress().getHostAddress();System.out.println(ip + "........");//获取客户端发送过来的数据InputStream input = socket.getInputStream();byte[] buf = new byte[1024];int len = input.read(buf);//向客户端返回数据OutputStream output = socket.getOutputStream();output.write("ni lai le a".getBytes());socket.close();System.out.println(new String (buf, 0 ,len));}
}
TCP小练习:
* 需求:
* 建立一个文本转换服务器。客户端给服务端发送文本,服务端将文本转成大写在返回给客户端
* 而且客户端可以不断的进行文本转换,当客户端输入over时,转换结束。
*/
客户端:
package cn.wangyu.net;import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.Socket;/** * @author JiangMinyan** @version 2016/02/22 10:34:23*/
public class TransClient {public static void main(String[] args) throws Exception{Socket client = new Socket("192.168.21.158", 10005);//定义读取键盘数据的流对象BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));//定义目的,将数据写到socket输出流。发给服务端BufferedWriter bufOut = new BufferedWriter(new OutputStreamWriter(client.getOutputStream()));//定义一个socket读取流,读取服务端返回的大写信息BufferedReader bufIn = new BufferedReader(new InputStreamReader(client.getInputStream()));String line = null;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();client.close();}
}
服务端:
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;public class TransServer {public static void main(String[] args) throws Exception{ServerSocket server = new ServerSocket(10005);Socket client = server.accept();String ip = client.getInetAddress().getHostAddress();System.out.println(ip + "......connected");//读取socket流中的数据。BufferedReader bufIn = new BufferedReader(new InputStreamReader(client.getInputStream()));//目的。socket输出流,将大写数据写入到socket输出流,并发送给客户端。BufferedWriter bufOut = new BufferedWriter(new OutputStreamWriter(client.getOutputStream()));String line = null;while((line = bufIn.readLine()) != null){System.out.println(line);bufOut.write(line.toUpperCase());bufOut.newLine();bufOut.flush();}client.close();server.close();}
}
java_网络编程学习笔记(一)相关推荐
- java 网络编程学习笔记
java 网络编程学习笔记 C/S模式:客户端和服务器 客户端创建流程 1 1.建立Socket端点 2 3 Socket s = new Socket(绑定地址, 绑定端口); 2.确认源数据方式和 ...
- [Linux网络编程学习笔记]索引
一.Linux基本知识 [学习笔记]Linux平台的文件I/O操作 [学习笔记]Linux平台的文件,目录及操作 [Linux学习笔记]标准输入输出 [Linux学习笔记]进程概念及控制 [Linux ...
- 编程开发:Linux网络编程学习笔记
非常全面.通俗易懂.值得借鉴的Linux网络编程学习笔记.关键字:linux linux编程 网络编程 linux网络编程 下载地址:点我下载 特别说明:本资源收集于网络,版权归原作者及版权商所有,仅 ...
- 15Java网络编程学习笔记
Java网络编程学习笔记 文章目录 1 网络基础 1.1 网络通信 1.2 网络 1.3 IP地址 1.5 域名 1.6 端口号 1.7 网络通信协议 1.8 TCP协议 1.9 UDP协议 2 In ...
- python网络编程学习笔记(二)
python网络编程学习(四) 多用途客户端协议 一.ftp 功能:上传下载文件,删除命名文件,建立删除目录,自动压缩,保存目录 1.代码: #coding=utf-8 '''连接远程ftp服务器,显 ...
- Linux网络编程学习笔记
声明:1.未经过原作者许可,不可用于商业行为:2.本笔记仅用于知识学习,如有侵权,立即删除. 1.学习链接 黑马程序员-Linux网络编程:https://www.bilibili.com/video ...
- python网络编程需要学什么,python网络编程学习笔记(五):socket的一些补充 Python 网络编程需要学习哪些网络相关的知识...
python的socket编程问题hdr = recvall(s, 5) if hdr is None: print 'Unexpected EOF receivingstruct在unpack的时候 ...
- Linux网络编程学习笔记(TCP)
文章目录 1 字节序 1.1 定义 1.2 字节序转换函数 2 Socket地址 2.1 通用socket地址(实际开发不使用) 2.2 专用socket地址 2 IP地址转换 3 TCP通信流程 3 ...
- Linux 网络编程学习笔记
前言: 本文是学习<Linux 高性能服务器编程(游双 著)>时所记录的重点知识. 一.TCP/IP 协议族 二.IP 协议详解 三.TCP 协议详解 四.HTTP 通信 五.Linux ...
最新文章
- LIVE555中RTSP客户端接收媒体流分析及测试代码
- 保护站点上已存在另一个具有相同实例 UUID的虚拟机_LoadRunner性能测试系统学习教程:工具介绍(上)...
- np.vstack()和np.hstack()
- 知识点041-Samba 的安装
- ts-node 学习笔记 - 如何解决在 Windows10 下不能直接运行 ts-node 的问题
- 阿里云CDN+OSS完成图片加速
- asp,jsp,php等web开发必懂技术---什么时候使用静态页,什么时候必须使用动态页...
- 线程同步与互斥:POSIX无名信号量
- 开源web管理系统mysql_10个基于Web的开源项目管理系统
- ArcFace算法笔记
- 头文件<ctype.h>
- 打开Idea,弹出Server‘s certificate is not trusted 解决方法
- Android MediaPlayer多媒体系统框架
- 打开和设置IDEA欢迎界面
- Android studio 运行警告 We recommend using a newer Android Gradle plugin to use compileSdk = 33
- 不良光线下的语义分割论文调研
- 常用的算法(PHP 版)
- 程序人生:扒一扒程序员为什么总在加班?拿生命敲代码?
- Java毕设项目社区团购系统计算机(附源码+系统+数据库+LW)
- HTML5期末大作业 基于HTML+CSS+JavaScript学校官网首页(实训素材)