Java 网络编程
来源:互联网 发布:windows更新出现问题 编辑:程序博客网 时间:2024/06/08 16:13
一、TCP/IP协议
为了进行网络通信,通信双方必须遵守通信协议.目前最广泛使用的是TCP/IP协议。
TCP/IP协议是一个协议组,包含Telnet、FTP、SMTP、NFS、HTTP等协议。
网络接口层:负责接收和发送物理帧;
网络层:负责相邻节点之间的通信;
传输层:负责起点到终点的通信;
应用层:提供诸如文件传输、电子邮件等应用程序。
二、InetAddress类
Java中inelAddress类是针对Java封装的互联网协议(IP)地址,它是Java对IP地址的一种高级标志。
public static void main(String argsp[]) throws UnknownHostException {InetAddress addr = InetAddress.getByName("it.warmtel.com");String hostAddress = addr.getHostAddress();//获取主机地址String hostName = addr.getHostName();//获取主机名System.out.println("主机名:" + hostName + ",\t主机地址:" + hostAddress);}
三、统一资源定位符URL
1、定义:
URL是一种最为直观的网络定位方式,它表示Internet上的某一资源地址。
2、格式:
<Method> ://<hostName:PORT>/<PATH>/<FILE>
<传输协议>:// <主机名:端口> /<路径名>/ <文件名>
例如:http 端口号默认为80可省略
3、Java中URL类
一个URL对象可以表示一个网络资源。程序利用URL对象能实现Internet寻址、网络资源的定位连接、在客户机与服务器之间直接访问等。
public static void main(String[] args) throws IOException {URL url = new URL("http://www.baidu.com");URLConnection connection = url.openConnection();// 建立链接// 建立缓冲输入流BufferedReader br = new BufferedReader(new InputStreamReader(connection.getInputStream()));String str;while (br.readLine() != null) {str = br.readLine();System.out.println(str);}}
四、Socket类
1、UDP协议和TCP协议
(1)UDP无连接,TCP面向链接
(2)UDP每个数据包大小限制为64k,TCP可以传输较大的数据
(3)UDP将传输的数据分成小包,直接上网发送。无需建立连接和拆除连接,速度快,但无可靠保证。
TCP每次通信前建立连接,通信结束后断开连接。特点是可以保证传输的正确性、可靠性。
2、Socket是TCP/IP协议的一种编程方式
一个Socket由一个IP地址和一个端口号唯一确定
(1)客户端Socket
/** * 启动客户端 */public void startClient() {try {Socket socket = new Socket(IP, PORT);sendMsg(socket);getMsg(socket);} catch (IOException e) {e.printStackTrace();}}/** * 客户端发送消息 * * @param socket */public void sendMsg(Socket socket) {new Thread(new Runnable() {@Overridepublic void run() {try {BufferedReader br = new BufferedReader(new InputStreamReader(System.in));PrintWriter pw = new PrintWriter(socket.getOutputStream());System.out.println("请输入要发送的消息:");String msg = br.readLine();while (msg != null) {pw.println(msg);pw.flush();System.out.println("发送成功!");System.out.println("请输入要发送的消息:");msg = br.readLine();}socket.close();} catch (IOException e) {e.printStackTrace();}}}).start();}/** * 客户端接收消息 */public void getMsg(Socket socket) {new Thread(new Runnable() {@Overridepublic void run() {try {BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));String msg = br.readLine();System.out.println("服务器:" + msg);while (true) {msg = br.readLine();System.out.println("服务器:" + msg);}} catch (IOException e) {}}}).start();}(2)服务端Soceket
/** * 服务端启动 * * @throws IOException */public void startServer() throws IOException {ServerSocket sSocket = new ServerSocket(PORT);System.out.println("欢迎进入");sendMsg();while (true) {Socket socket = sSocket.accept();System.out.println("新用户加入聊天");socketList.add(socket);getMsg(socket);size = socketList.size();System.out.println("当前用户人数:[" + size + "]人");}}/** * 服务端群发消息 */public void sendMsg() {new Thread(new Runnable() {@Overridepublic void run() {try {BufferedReader br = new BufferedReader(new InputStreamReader(System.in));while (true) {System.out.println("请输入要发送的信息:");String msg = br.readLine();for (Socket s : socketList) {PrintWriter pw = new PrintWriter(s.getOutputStream());pw.println(msg);pw.flush();}}} catch (IOException e) {e.printStackTrace();}}}).start();}/** * 服务器接收消息并且转发给除发送信息外其他客户端 */public void getMsg(Socket socket) {new Thread(new Runnable() {@Overridepublic void run() {BufferedReader br;try {br = new BufferedReader(new InputStreamReader(socket.getInputStream()));while (true) {String msg = br.readLine();if (msg != null) {System.out.println("客户端:" + msg);}for (Socket s : socketList) {if (s == socket)continue;PrintWriter pw = new PrintWriter(s.getOutputStream());pw.println(msg);pw.flush();}}} catch (IOException e) {e.printStackTrace();}}}).start();}
0 0
- 【网络编程】JAVA网络编程
- java网络编程:网络基本概念
- Java网络编程-UDP编程
- Java 高层网络编程
- Java网络编程2
- Java网络编程3
- Java网络编程4
- Java网络服务器编程
- java网络编程1
- java网络编程2
- JAVA网络编程
- Java网络服务器编程
- java网络编程
- Java 高层网络编程
- Java 高层网络编程
- Java网络服务器编程
- Java网络编程
- JAVA网络编程
- java 中的基本数据类型的传递和引用数据类型的传递
- 21.二叉搜索树的后序遍历序列(做第二遍时感觉仍有难度,第三次做时还是要看思路)
- 【BZOJ3524】Couriers,第一次的主席树
- Win10屏幕亮度无法调节
- ByteBuf
- Java 网络编程
- EventBus学习笔记
- Wireshark中The ntf is not running的问题
- nyoj 308 substring (最长逆序字符串)
- leetcode - Majority Element
- MAC 安装 brew
- 转载我感觉比较好的java线程的学习
- Android去標題時報錯:java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendan
- 排序和查找-基数排序 Radix Sorting