java学习笔记 --- 网络编程(套接字)
1、Socket通信原理
Socket套接字概述:
网络上具有唯一标识的IP地址和端口号组合在一起才能构成唯一能识别的标识符套接字。
通信的两端都有Socket。
网络通信其实就是Socket间的通信。
数据在两个Socket间通过IO流传输。
Socket在应用程序中创建,通过一种绑定机制与驱动程序建立关系,告诉自己所对应的IP和port。
B:图解

二、UDP传输
1.发送Send
创建DatagramSocket, 随机端口号
创建DatagramPacket, 指定数据, 长度, 地址, 端口
使用DatagramSocket发送DatagramPacket
关闭DatagramSocket
2.接收Receive
创建DatagramSocket, 指定端口号
创建DatagramPacket, 指定数组, 长度
使用DatagramSocket接收DatagramPacket
关闭DatagramSocket
从DatagramPacket中获取数据
3.接收方获取ip和端口号
String ip = packet.getAddress().getHostAddress();
int port = packet.getPort();
public class Send {
public static void main(String[] args) throws Exception {
//键盘输入
Scanner sc = new Scanner(System.in);
//1、创建DatagramSocket,随机端口号
DatagramSocket scoket = new DatagramSocket();
//创建传输内容
while(true){
String str = sc.nextLine();
//如果输入"886"则退出
if("886".equals(str)){
break;
}
//2、创建DataramPacket,指定数据,长度,地址,端口
DatagramPacket packet = new DatagramPacket(str.getBytes(), str.getBytes().length, InetAddress.getByName("127.0.0.1"), 6666);
//3、使用DatagramSocket发送DatagramPacket
scoket.send(packet);
}
//4、关闭DatagramSocket
scoket.close();
}
}
-------------------------------------------------------------------------------------
public class Receive {
public static void main(String[] args) throws Exception {
//1、创建DatagramSocket,制定端口号
DatagramSocket socket = new DatagramSocket(6666);
//2、创建DatagramPacket,指定数组,长度
DatagramPacket packet = new DatagramPacket(new byte[1024], 1024);
//3、使用DatagramSocket接收DatagramPacket
while(true){
socket.receive(packet); //接收数据
byte[] arr =packet.getData();//获取数据
int len = packet.getLength();//获取有效的直接个数
String ip = packet.getAddress().getHostAddress();//获取ip地址
int port = packet.getPort();//获取端口号
System.out.println(ip+":"+":"+new String(arr,0,len));
}
}
}
三、TCP协议传输
1.客户端
创建Socket连接服务端(指定ip地址,端口号)通过ip地址找对应的服务器
调用Socket的getInputStream()和getOutputStream()方法获取和服务端相连的IO流
输入流可以读取服务端输出流写出的数据
输出流可以写出数据到服务端的输入流
2.服务端
创建ServerSocket(需要指定端口号)
调用ServerSocket的accept()方法接收一个客户端请求,得到一个Socket
调用Socket的getInputStream()和getOutputStream()方法获取和客户端相连的IO流
输入流可以读取客户端输出流写出的数据
输出流可以写出数据到客户端的输入流
/*.服务端
* 创建ServerSocket(需要指定端口号)
* 调用ServerSocket的accept()方法接收一个客户端请求,得到一个Socket
* 调用Socket的getInputStream()和getOutputStream()方法获取和客户端相连的IO流
* 输入流可以读取客户端输出流写出的数据
* 输出流可以写出数据到客户端的输入流
*/
public class Server {
public static void main(String[] args) throws IOException {
//1、创建ServerSocket,并指定端口号
ServerSocket server = new ServerSocket(12345); //2、调用ServerSocket的accept()方法接受一个客户端请求,等到一个Socket
Socket socket = server.accept(); //3、调用Socket的getInputStream()和getOutputStream()方法获取客户端相连的io流
InputStream is = socket.getInputStream();
OutputStream os = socket.getOutputStream();
os.write("百度一下吧".getBytes());//服务器向客户端写出数据 //读取客户端发过来的数据
byte[] arr =new byte[1024];
int len = is.read(arr);
//将数据转换成字符串并打印
System.out.println(new String(arr,0,len));
//释放资源
socket.close(); }
-------------------------------------------------------------------------------------
/*.客户端
* 创建Socket连接服务端(指定ip地址,端口号)通过ip地址找对应的服务器
* 调用Socket的getInputStream()和getOutputStream()方法获取和服务端相连的IO流
* 输入流可以读取服务端输出流写出的数据
* 输出流可以写出数据到服务端的输入流
*/
public class Cilent {
public static void main(String[] args) throws Exception{
//1、创建Socket连接服务器端(要指定Ip地址和端口号)通过ip地址找到对应的服务器
Socket socket = new Socket("127.0.0.1",12345); //2、调用Socket的getInputStream()和getOutputStream()方法获取和服务端相连的IO流
InputStream is =socket.getInputStream();
OutputStream os = socket.getOutputStream(); //3、读取服务器端发过来的数据
byte[] arr = new byte[1024];
int len = is.read(arr); //4、将数据转换成字符串打印
System.out.println(new String(arr,0,len)); //向服务器写数据
os.write("是这样敲代码吗".getBytes()); //释放资源
socket.close();
}
}
java学习笔记 --- 网络编程(套接字)的更多相关文章
- Java学习笔记-网络编程
Java提供了网络编程,并且在实际中有着大量运用 网络编程 网络编程概述 网络模型 OSI参考模型 TCP/IP参考模型 网络通讯要素 IP地址 端口号 传输协议 网络参考模型 网络通讯要素 IP地址 ...
- Java 学习笔记 网络编程 使用Socket传输文件 CS模式
Socket的简单认识 Socket是一种面向连接的通信协议,Socket应用程序是一种C/S(Client端/Server端)结构的应用程序 Socket是两台机器间通信的端点. Socket是连接 ...
- java学习笔记 --- 网络编程(网络的基础知识)
1.网络模型: |--OSI(open stystem Interconnection开放式系统互连) |--特点: 是一种异构系统互连的分层结构:提供了控制互连系统交互规则的标准骨架:定义一种抽象结 ...
- Java学习:网络编程总结
Java网络编程总结 一.概述 计算机网络是通过传输介质.通信设施和网络通信协议,把分散在不同地点的计算机设备互连起来,实现资源共享和数据传输的系统.网络编程就就是编写程序使联网的两个(或多个)设备( ...
- Java学习之网络编程实例
转自:http://www.cnblogs.com/springcsc/archive/2009/12/03/1616413.html 多谢分享 网络编程 网络编程对于很多的初学者来说,都是很向往的一 ...
- Java网络编程--套接字Socket
一.套接字Socket IP地址标志Internet上的计算机,端口号标志正在计算机上运行的进程(程序). 端口号被规定为一个16位的0--65535之间的整数,其中,0--1023被预先定义的服务通 ...
- UNIX网络编程——套接字选项(心跳检测、绑定地址复用)
/* 设置套接字选项周期性消息检测连通性 心跳包. 心博.主要用于长连接. * 参数:套接字, 1或0开启, 首次间隔时间, 两次间隔时间, 断开次数 */ void setKeepAlive( in ...
- 网络编程 套接字socket TCP UDP
网络编程与套接字 网络编程 网络编程是什么: 网络通常指的是计算机中的互联网,是由多台计算机通过网线或其他媒介相互链接组成的 编写基于网络的应用程序的过程序称之为网络编程. 网络编程最主要的工 ...
- UNIX网络编程——套接字选项
http://www.educity.cn/linux/1241288.html 有时候我们需要控制套接字的行为(如修改缓冲区的大小),这个时候我们就要学习套接字选项. int getsockopt( ...
随机推荐
- Groovy系列-groovy比起Java--有哪些地方写起来更舒服?
groovy比起java-有哪些地方写起来更舒服 java发展缓慢,语法落后冗余 说起java,其实java挺好的,java现在的性能也不错,但是,java的语法显然比较落后,而且冗余,getter/ ...
- (转) GIS 中地理坐标和屏幕坐标的标准转换方法
from :http://www.cnblogs.com/WonKerr/archive/2010/01/01/Coord_Transform.html 在GIS中,当你拿到一个图层的地理坐标后,如果 ...
- Python异步非阻塞IO多路复用Select/Poll/Epoll使用,线程,进程,协程
1.使用select模拟socketserver伪并发处理客户端请求,代码如下: import socket import select sk = socket.socket() sk.bind((' ...
- Linux Shell编程 sort、wc命令
sort命令:字符串排序 sort 命令可以依据不同的数据类型来进行排序.sort 将文件的每一行作为一个单位,相互比较.比较原则是从首字符向后,依次按 ASCII 码值进行比较,最后将它们按升序输出 ...
- PHP连接到mysql的方法--mysqli和PDO
php连接到mysql数据库,经典的方式就是使用mysql_connect(),具体代码如下: mysql_connect($db_host, $db_user, $db_pass) or die(m ...
- 原生javasxript获取浏览器的滚动距离和可视窗口的高度
原生javasxript获取浏览器的滚动距离和可视窗口的高度 //封装兼容性方法获取滚动的距离 function getScrollOffset(){ if(window.pageXOffset){ ...
- IMP导入小记
1.创建表空间 create tablespace example_tablespace datafile 'e:\****.dbf' size 10m reuse autoextend on nex ...
- Android系统--Binder系统具体框架分析(一)
Binder系统具体框架分析(一) 一.Binder系统核心框架 1. IPC:Inter-Process Communication, 进程间通信 A进程将数据原原本本发送B进程,主要负责进程间数据 ...
- tree 命令【转】
本文转载自:http://www.jb51.net/LINUXjishu/283874.html linux下怎么用tree命令以树形结构显示文件目录结构?tree命令可以以树形结构显示文件目录结构, ...
- Go 语言基础知识
0. Go语言书单 1. 文本注释 // 单行注释 /* */ 多行注释 2. 变量赋值 = 变量赋值 := 声明变量并赋值 3. 变量定义 var name string var age int v ...