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学习笔记 --- 网络编程(套接字)的更多相关文章

  1. Java学习笔记-网络编程

    Java提供了网络编程,并且在实际中有着大量运用 网络编程 网络编程概述 网络模型 OSI参考模型 TCP/IP参考模型 网络通讯要素 IP地址 端口号 传输协议 网络参考模型 网络通讯要素 IP地址 ...

  2. Java 学习笔记 网络编程 使用Socket传输文件 CS模式

    Socket的简单认识 Socket是一种面向连接的通信协议,Socket应用程序是一种C/S(Client端/Server端)结构的应用程序 Socket是两台机器间通信的端点. Socket是连接 ...

  3. java学习笔记 --- 网络编程(网络的基础知识)

    1.网络模型: |--OSI(open stystem Interconnection开放式系统互连) |--特点: 是一种异构系统互连的分层结构:提供了控制互连系统交互规则的标准骨架:定义一种抽象结 ...

  4. Java学习:网络编程总结

    Java网络编程总结 一.概述 计算机网络是通过传输介质.通信设施和网络通信协议,把分散在不同地点的计算机设备互连起来,实现资源共享和数据传输的系统.网络编程就就是编写程序使联网的两个(或多个)设备( ...

  5. Java学习之网络编程实例

    转自:http://www.cnblogs.com/springcsc/archive/2009/12/03/1616413.html 多谢分享 网络编程 网络编程对于很多的初学者来说,都是很向往的一 ...

  6. Java网络编程--套接字Socket

    一.套接字Socket IP地址标志Internet上的计算机,端口号标志正在计算机上运行的进程(程序). 端口号被规定为一个16位的0--65535之间的整数,其中,0--1023被预先定义的服务通 ...

  7. UNIX网络编程——套接字选项(心跳检测、绑定地址复用)

    /* 设置套接字选项周期性消息检测连通性 心跳包. 心博.主要用于长连接. * 参数:套接字, 1或0开启, 首次间隔时间, 两次间隔时间, 断开次数 */ void setKeepAlive( in ...

  8. 网络编程 套接字socket TCP UDP

    网络编程与套接字 网络编程 网络编程是什么: ​ 网络通常指的是计算机中的互联网,是由多台计算机通过网线或其他媒介相互链接组成的 ​ 编写基于网络的应用程序的过程序称之为网络编程. 网络编程最主要的工 ...

  9. UNIX网络编程——套接字选项

    http://www.educity.cn/linux/1241288.html 有时候我们需要控制套接字的行为(如修改缓冲区的大小),这个时候我们就要学习套接字选项. int getsockopt( ...

随机推荐

  1. boost之日期date_time

    date_time库使用的日期基于格里高利历,支持从1400-01-01到9999-12-31的日期. 空的构造函数会创建一个值为not_a_date_time的无效日期:顺序传入年月日值则创建一个对 ...

  2. java switch case 枚举类型的反编译结果

     package com.example.demo; import java.io.PrintStream;  // Referenced classes of package com.example ...

  3. Overload and Override without Overwrite - Java

    Override(覆盖/覆写): 子类Override父类中的函数(方法).Overload(重载): 同一个类中包含多个同名的函数(方法), 但各个函数的参数列表不同. Override和Overl ...

  4. Apache Shiro:【2】与SpringBoot集成完成登录验证

    Apache Shiro:[2]与SpringBoot集成完成登录验证 官方Shiro文档:http://shiro.apache.org/documentation.html Shiro自定义Rea ...

  5. python之路 内置函数,装饰器

    一.内置函数 #绝对值 abs() #所有值都为真才为真 all() #只要有一个值为真就为真 any() #10进制转成二进制 bin() #10进制转成八进制 oct() #10进制转成十六进制 ...

  6. ABP框架数据迁移报错

    问题描述:将项目从TFS载下来  然后敲update-database 进行数据迁移 提示:Update-Database : 无法将“Update-Database”项识别为 cmdlet.函数.脚 ...

  7. VC引用动态库

    1. 程序所在目录 2. 进程当前目录 3. 系统目录(C:\WINDOWS\System32) 4. Windows目录(C:\WINDOWS) 5. PATH环境变量指向的目录

  8. git 使用教程 --基础一

    第一步:下载git   https://git-scm.com/ 第二步: 切到需要保存的文件夹下,执行: bogon:VBV mona$ git init #初始化,表示即将对当前文件夹进行版本控制 ...

  9. ==、equals与hashCode

    ==  首先,得说明java数据类型分为基本数据类型和引用数据类型, 基本数据类型有8种: 浮点型:float(4 byte), double(8 byte) 整型:byte(1 byte), sho ...

  10. maven install 找不到自定义jar包

    解决方案是在Prefernces-->Maven-->user Settings 里面点击Update settings 然后就好了.因为默认你配置settings.xml指向你的类库的时 ...