文档章节

网络通信

心猿bug
 心猿bug
发布于 2017/05/01 17:27
字数 849
阅读 3
收藏 0
  • 网络通信: 

网络通讯三要素:

1. IP地址: 每台主机都必须有一个唯一的IP地址,IP地址是一个逻辑地址

2.端口号:  端口用一个整数型标识符来表示,即端口号。

            在互联网上传输的数据都包含有用来识别目的地的IP地址和端口号

3.传输协议:网络通讯时的传输规则。

IP协议

UDP协议:面向无连接,传输速度快,数据封装成报传输,每个包不超过64k,传输不可靠;

TCP协议:面向建立连接,可传输大量数据,通过3次握手建立连接,效率稍低,但是传输可靠。

套接字(Socket):

            将应用程序和端口连接起来你,相当于一个“插座”

 UDP连接发送机制:

(1) 先建立发生端的udp服务,通过new  DatagramSocket();

(2)将数据进行封装打包并发生,通过new  DatagramPacket();

(3)通过send()完成发送;

(4)关闭连接;

UDP接收机制:

(1) 先建立发生端的udp服务,通过new  DatagramSocket();

(2)建立用于接收数据的包,new  DatagramPacket();

(3)接收数据,receive();

(4)取出数据并打印;

(5)关闭连接


package mydemo2_3;
import java.net.*;
import java.io.*;
public class SendDemo {

	public static void main(String[] args) {
		DatagramSocket ds=null;
		DatagramPacket dp=null;           //UDP 协议发送端代码
		BufferedReader br=null;
		try {
			ds=new DatagramSocket();
			br=new BufferedReader(new InputStreamReader(System.in));
			String line=null;
			while((line=br.readLine())!=null) {
				byte[] buf=line.getBytes();
				dp=new DatagramPacket(buf,0,buf.length,InetAddress.getLocalHost(),8080);
				ds.send(dp);
			}
		} catch(SocketException e) {
			e.printStackTrace();
		} catch(UnknownHostException e) {
			e.printStackTrace();
		} catch(IOException e) {
			e.printStackTrace();
		} finally {
			try {
				ds.close();
			} catch(Exception e) {
				e.printStackTrace();
			}
		}

	}

}




package mydemo2_3;
import java.io.*;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;
public class ReceiveDemo {

	public static void main(String[] args) {
	DatagramSocket ds=null;
	DatagramPacket dp=null;
		try {                                      //UDP 接收端代码
			ds=new DatagramSocket(8080);
			while(true) {
				byte[] buf=new byte[1024];
				dp=new DatagramPacket(buf,buf.length);
				ds.receive(dp);
				String ip=dp.getAddress().getHostAddress();
				int port=dp.getPort();
				String data=new String(dp.getData());
				System.out.println(ip+port+data);
			}
		} catch(SocketException e) {
			e.printStackTrace();
		} catch(IOException e) {
			e.printStackTrace();
		} finally {
			try {
				ds.close();
			} catch(Exception e ) {
				e.printStackTrace();
			}
		}
	}

}


​

TCP协议传输机制:

原理是:先建立客户端的Socket服务,通过Socket对象里的in 和out完成读写的作用。当客户端和服务端连接后,服务端有了客户端的Socket对象,用Socket对象里的in  和out完成和它之间的数据传输。

具体方式:

      建立客户端的Socket服务(传输ip和服务端的端口号),通过Socket对象里的getOutputStream() 方法,来写入数据,此时在服务端建立ServerSocket服务(传入端口号),然后调用accept()方法,返回Socket对象,此时用Socket对象中的getInputStream()方法来读取客户端传过来的数据并打印。

​

package mydemo2_3;

import java.io.*;
import java.net.*;

public class Client {

	public static void main(String[] args) {              //TCP客户端代码
		Socket s = null;
		BufferedReader br = null;
		// BufferedWriter bw=null;
		// BufferedReader br1=null;
		try {
			s = new Socket("192.168.2.100", 23477);
			br = new BufferedReader(new InputStreamReader(System.in));
			// bw=new BufferedWriter(new
			// OutputStreamWriter(s.getOutputStream()));
			PrintWriter out = new PrintWriter(s.getOutputStream(), true);
			BufferedReader br1 = new BufferedReader(new InputStreamReader(
					s.getInputStream()));
			// OutputStream out=s.getOutputStream();
			String line = null;
			while ((line = br.readLine()) != null) {
				if ("over".equals(line)) {
					break;
				}
				// bw.write(line);
				// bw.newLine();
				// bw.flush();
				out.println(line);
				String str = br1.readLine();
				System.out.println("大写:" + str);
			}
		} catch (SocketException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			try {
				s.close();
				br.close();
			} catch (Exception e) {
				e.printStackTrace();
			}
		}

	}

}


package mydemo2_3;
import java.io.*;
import java.net.*;
public class Server {

	public static void main(String[] args) {
		ServerSocket server=null;
		BufferedReader br=null;
		//BufferedWriter bw=null;                       //TCP服务端代码
		try {
			server=new ServerSocket(23477);
			Socket s=server.accept();
			br=new BufferedReader(new InputStreamReader(s.getInputStream()));
			//bw=new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
			PrintWriter out=new PrintWriter(s.getOutputStream(),true);
			String line= null;
			while((line=br.readLine())!=null) {
				String str=line.toUpperCase();
//				bw.write(str);
//				bw.newLine();
//				bw.flush();
				out.println(str);
			}
		} catch(SocketException e) {
			e.printStackTrace();
		} catch(IOException e) {
			e.printStackTrace();
		} finally {
			try {
				server.close();
			} catch(Exception e) {
				e.printStackTrace();
			}
		}
		

	}

}

​

 

© 著作权归作者所有

上一篇: 多线程
下一篇: IO流
心猿bug
粉丝 3
博文 25
码字总数 15343
作品 0
平凉
私信 提问
UNIX网络编程卷2进程间通信读书笔记汇总

UNIX网络编程卷2进程间通信读书笔记(一)—概述 http://blog.chinaunix.net/u/22935/article_52711_2.html UNIX网络编程卷2进程间通信读书笔记(二)—管道 (1) http://blog.chinaunix.ne...

长平狐
2012/09/03
228
0
小白docker入门之Kubernetes的网络知识

目录 docker的网络通信 kubernetes的网络通信 总结 kubernetes集群搭建完成后,使用docker ps命令,可以看到正在跑的容器,其中一个容器名字叫flannel。这个flannel是一个开源的网络组件,了...

OrangeLoveMilan
2017/12/29
0
0
网络通信基础重难点解析 专题介绍

版权声明:欢迎关注我的微信公众号:「easyserverdev」,中文名:『高性能服务器开发』。 https://blog.csdn.net/analogous_love/article/details/88719577 网络通信基础重难点解析 专题介绍...

analogous_love
03/21
0
0
配置网卡

在计算机网络中,某台主机要想接入网络实现通信的话,一般要配置IP地址、子网掩码、网关、DNS服务器地址等属性。其中IP地址是主机在互联网上的逻辑地址,通过IP地址可定位互联网上的某一台主...

Vincent一马
2017/07/14
0
0
SOFABolt 发布 v1.5.5 版本 | 蚂蚁金服开源网络通信框架

1、发布 SOFABolt v1.5.5 版本,主要变更如下: 1)兼容性 兼容1.5.4版本 v1.5.5的pom依赖 2)主要改动 bugfix 修复了在开启自动重连开关的场景下,通过RpcClient#closeConnection方法关闭连...

SOFAStack
05/30
1K
7

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周日乱弹 —— 我,小小编辑,食人族酋长

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @宇辰OSC :分享娃娃的单曲《飘洋过海来看你》: #今日歌曲推荐# 《飘洋过海来看你》- 娃娃 手机党少年们想听歌,请使劲儿戳(这里) @宇辰OSC...

小小编辑
今天
623
10
MongoDB系列-- SpringBoot 中对 MongoDB 的 基本操作

SpringBoot 中对 MongoDB 的 基本操作 Database 库的创建 首先 在MongoDB 操作客户端 Robo 3T 中 创建数据库: 增加用户User: 创建 Collections 集合(类似mysql 中的 表): 后面我们大部分都...

TcWong
今天
32
0
spring cloud

一、从面试题入手 1.1、什么事微服务 1.2、微服务之间如何独立通讯的 1.3、springCloud和Dubbo有哪些区别 1.通信机制:DUbbo基于RPC远程过程调用;微服务cloud基于http restFUL API 1.4、spr...

榴莲黑芝麻糊
今天
19
0
Executor线程池原理与源码解读

线程池为线程生命周期的开销和资源不足问题提供了解决方 案。通过对多个任务重用线程,线程创建的开销被分摊到了多个任务上。 线程实现方式 Thread、Runnable、Callable //实现Runnable接口的...

小强的进阶之路
昨天
56
0
maven 环境隔离

解决问题 即 在 resource 文件夹下面 ,新增对应的资源配置文件夹,对应 开发,测试,生产的不同的配置内容 <resources> <resource> <directory>src/main/resources.${deplo......

之渊
昨天
60
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部