java套接字编程相关知识
-
初步接触 Java Net 网络编程本文目的是大概了解 Java 网络编程体系,需要一点点 Java IO 基础,推荐教程 系统学习 Java IO。主要参考 JavaDoc 和 Jakob Jenkov 的英文教程《Java Networking》 http://tutorials.jenkov.com/java-networking/index.htmlJava 网络编程概览Java 有一个相当容易使用的内置网络 API,可以很容易地通过互联网上的 TCP / IP 套接字或 UDP 套接字进行通信。 TCP 通常比 UDP 使用得更频繁。即使 Java Networking API 允许通过套接字打开和关闭网络连接,但所有通信都通过 Java IO 类 InputStream 和 OutputStream 实现的。或者,我们可以使用 Java NIO API 中的网络类。 用法类似于 Java Networking API 中的类,但 Java NIO API 可以在非阻塞模式下工作。 在某些情况下,非阻塞模式可提升性能。Java TC
-
Java Socket:飞鸽传书的网络套接字在古代,由于通信不便利,一些聪明的人就利用鸽子会飞且飞得比较快、会辨认方向的优点,对其进行了驯化,用来进行消息的传递——也就是所谓的“飞鸽传书”。而在 Java 中,网络套接字(Socket)扮演了同样的角色。套接字(Socket)是一个抽象层,应用程序可以通过它发送或接收数据;就像操作文件那样可以打开、读写和关闭。套接字允许应用程序将 I/O 应用于网络中,并与其他应用程序进行通信。网络套接字是 IP 地址与端口的组合。01、ping 与 telnet“老王啊,能不能帮我看一下这个问题呢,明明本地可以进行网络通信,可等我部署到服务器上时就通信不了了,搞了半天也不知道什么原因,我看代码是没有问题的。”小二的语气中充满了沮丧。“ping 过吗?或者 telnet 了吗?”老王头都没回,冷冰冰地扔出去了这句话。“哦,我去试试。”小二心头掠过一丝愧疚。ping 与 telnet 这两个命令,对调试网络程序有着非常大的帮助。ping,一种计算机网络工具,用来测试数据包能否透过 IP 协议到达特定主机。ping 会向
-
linux网络编程系列(二)-socket套接字基本概念详解1. 网络编程基本概念 1.1 什么是套接字 套接字,也叫socket,是操作系统内核中的一个数据结构,它是网络中的节点进行相互通信的门户。网络通信,说白了就是进程间的通信(同一台机器上不同进程或者不同计算机上的进程间通信)。 在网络中,每一台计算机或者路由都有一个网络地址,就是IP地址。两个进程通信时,首先要确定各自所在的网络节点的网络地址。但是,网络地址只能确定进程所在的计算机,而一台计算机上一般都是同时运行着多个进程,所以仅凭网络地址还不能确定到底是和网络中的哪
-
【九月打卡】第4天 计网传输层之TCP四次挥手、套接字编程一、课程信息 打卡时间:2022.9.9 课程名称:2022新版编程必备基础,计算机组成原理+操作图片描述系统+网络 章节名称:计算机网络之传输层 讲师: 咚咚呛 二、今日课程 课程内容:TCP四次挥手、等待计时器、套接字 三、学习心得 3.1 TCP四次挥手 三次握手是建立连接的过程,四次挥手就是断开连接的过程。四次挥手的过程如下:发送方发送FIN报文(第一次挥手),接收方发送ACK(第二次挥手),接收方发送FIN报文(第三次挥手),发送方发送ACK报文(第四次挥手)。 为什么接收方第二
java套接字编程相关课程
java套接字编程相关教程
- 2.5 套接字 上述介绍的 IPC 方式都是同一个主机内进程的交互方式,都是本地通信,套接字(Socket)一般用来处理不同主机进程之间的通信,也就是远程通信,是网络通信最常用的方式。Socket 通信需要 TCP 或者 UDP 协议的支持。使用 C 语言创建 Socket 的示例:#include <sys/types.h> #include <sys/socket.h> //引入头文件int socket(int domain, int type, int protocol); //创建一个socket
- 1.1 Java 中的编译 在 Java 中,程序不是直接被编译为可执行文件,而是被编译为字节码文件, JVM(Java虚拟机)在运行时执行字节码文件。当我们使用 javac 编译器时,Java 源代码文件被编译为字节码文件,字节码文件以扩展名 .class 的形式保存在磁盘上。当程序运行时,字节码文件将被转换为机器代码,并在内存中执行。总的来说,Java 源代码需要被“转换”两次才能被计算机执行:Java 源代码被编译为字节码:由 javac 前端编译器完成;字节码被编译为机器码:由 JVM 的执行引擎完成。下图描述了一个Java程序从编写到编译,再到执行的步骤:
- 2. Java 多线程编程方法 由于本节会涉及到 Java 多线程编程,所以需要你能预先掌握 Java 多线程编程的方法。比如,线程的创建,线程的启动,线程之间的同步和线程之间的通信。在 Java 平台下,创建线程的方法有两种:第一,是创建一个用户自定义的线程类,然后继承 java.leng.Thread 类,同时要覆写它的 run 方法,调用它的 start 方法启动线程。例如:class MyThread extends Thread{ @Override public void run() { super.run(); }}new MyThread().start();第二,是创建一个任务类。首先,实现 Runnable 接口,并且重写它的 run 方法。然后,创建 java.leng.Thread 类的对象,同时将 Runnable 的实例通过 java.lang.Thread 的构造方法传入。最后,调用 java.lang.Thread 的 start 方法启动线程。例如:class MyTask implements Runnable{ @Override public void run() { }}new Thread(new MyTask()).start();
- 1. 内部类和嵌套类 我们都知道在 Java 中表示内部类实际上就是将内部类嵌套在外部类中就声明了一个内部类,那么内部类就能访问外部类私有成员。//PageAdapterpublic abstract class PageAdapter { public abstract int getCount(); public abstract String getItem(int position);}//PageTestpackage com.imooc.test;import java.util.Arrays;import java.util.List;public class PageTest { private List<String> mData = Arrays.asList("1", "2", "3"); class TestPageAdapter extends PageAdapter {//在Java中只需要把内部类TestPageAdapter声明在外部类PageTest内部即可 @Override public int getCount() { return mData.size();//内部类即可以访问外部私有成员 } @Override public String getItem(int position) { return mData.get(position); } }}然而在 Kotlin 中不是这样的,对于 Kotlin 中在一个类内部再声明一个类我们把它称为嵌套类,嵌套类是不能直接访问外部类的私有成员的。package com.imooc.testclass PageTestKt { private val mData = listOf<String>("1", "2", "3") class TestPageAdapter : PageAdapter() { override fun getItem(position: Int): String { return mData[position]//由于无法访问mData,所以mData[position]编译报错 } override fun getCount(): Int { return mData.size//由于无法访问mData,所以mData.size编译报错 } }为什么 Kotlin 嵌套类不能直接访问外部类私有成员,我们可以把它反编译成 Java 代码就一目了然了:public final class PageTestKt { private final List mData = CollectionsKt.listOf(new String[]{"1", "2", "3"}); public static final class TestPageAdapter extends PageAdapter {//可以看到实际上Kotlin嵌套类就是一个static静态类,所以它肯定不能访问外部类PageTestKt私有成员mData @NotNull public String getItem(int position) { return ""; } public int getCount() { return 0; } }}可以看到实际上 Kotlin 嵌套类就是一个 static 静态类,所以它肯定不能访问外部类 PageTestKt 私有成员 mData。如果要在 Kotlin 声明一个内部类,应该怎么做呢?很简单只需要在嵌套类基础上加上一个 inner 关键字声明即可。package com.imooc.testclass PageTestKt { private val mData = listOf<String>("1", "2", "3") inner class TestPageAdapter : PageAdapter() {//inner关键字声明一个Kotlin中的内部类 override fun getItem(position: Int): String { return mData[position]//由于TestPageAdapter是PageTestKt的内部类,那么它就可以直接访问外部类私有属性mData } override fun getCount(): Int { return mData.size } }}为了进一步验证 inner class 实际上就是对应 Java 中的内部类,我们可以上述代码反编译成 Java 代码验证下:public final class PageTestKt { private final List mData = CollectionsKt.listOf(new String[]{"1", "2", "3"}); public final class TestPageAdapter extends PageAdapter {//可以看到TestPageAdapter确实是PageTestKt内部类,所以能直接访问外部类的私有成员mData @NotNull public String getItem(int position) { return (String)PageTestKt.this.mData.get(position); } public int getCount() { return PageTestKt.this.mData.size(); } }}总结一下:声明嵌套类时,在 Java 中是在外部类内部使用 static class A , 而在 Kotlin 中只需要在外部类内部使用 class A 即可;声明内部时,在 Java 中只需要在外部类内部使用 class A , 而在 Kotlin 中则需要在外部类内部使用 inner class A 。类 A 在类 B 内部声明在 Java 中在 Kotlin 中嵌套类 (不能直接访问外部类私有属性)static class Aclass A 内部类 (能直接访问外部类私有属性)class Ainner class A
- 3. Java 非阻塞式 Socket 编程 介绍 Java 非阻塞式 Socket 编程,就得介绍 Java NIO。Java NIO 是 Java New IO API,有时也解释为 Java Non-blocking IO。通过 Java NIO 可以实现 Java 非阻塞 Socket 编程。Java NIO 是 Java 1.4 支持的,它将 Socket 数据流抽象为一个 Channel(管道),Socket 数据读写是通过 Channel实现的,并且提供了 Buffer 机制,提高数据读写的性能。Java NIO 通常用来编写高性能 Java 服务器程序。在 Java 1.7 以后,Java NIO 对磁盘文件处理得到了增强,可以将 Socket I/O 和 文件 I/O 融合在 Java NIO 中。Java NIO 提供的新的类结构如下:类名称功能说明ServerSocketChannel表示服务端 TCP Socket 的监听 Channel。ServerSocketChannel 提供的工厂方法 open,用于创建它的实例;同时它提供了 accept 方法用于在服务器中接收新的客户端连接请求,返回值是 SocketChannel 类的实例。SocketChannelSocketChannel 表示一个 TCP 通信 Channel,可以通过它的 open 方法创建,也可以通过 ServerSocketChannel 的 accept 方法创建。SelectorJava I/O 事件多路复用机制,用于同时监听多个 Channel 的读、写、监听事件SelectionKey用于表示具体的事件对象ByteBuffer通过 SocketChannel 进行数据读写,依赖 ByteBufferServerSocketChannel 和 SocketChannel 同时支持阻塞式和非阻塞式,默认是阻塞式。可以通过如下的方法,打开非阻塞式。// 配置监听 ServerSocketChannel 为非阻塞模式ServerSocketChannel serverChannel = ServerSocketChannel.open();serverChannel.configureBlocking(false);// 配置服务器新建立的 SocketChannel 为非阻塞模式SocketChannel newSock = serverChannel.accept();newSock.configureBlocking(false);SocketAddress serverAddr = new InetSocketAddress("127.0.0.1", PORT);SocketChannel sock = SocketChannel.open(serverAddr);// 配置客户端 SocketChannel 为非阻塞sock.configureBlocking(false);
- Java 字符串 在 Java 基本数据类型一节中,我们已经知道 Java 中有两大数据类型:一个是基本数据类型,另一个是引用数据类型。字符串(String)便属于引用数据类型。字符串在 Java 程序中无处不在,其实我们在第一个 Java 程序中就已经使用过了字符串,打印语句中双引号中的Hello World就是一个字符串:System.out.println("Hello World");本小节我们将介绍字符串的基础知识,告诉你如何创建一个字符串,也会讲到 Java 13支持的多行字符串的创建方法和注意事项,还会介绍很常用的字符串的连接操作,最后我们也会着重讨论字符串的一个重要特性:不可变性。需要注意的是,String是在java.lang包中定义的内置类,了解它的相关操作需要面向对象的前置知识,为了减少初学者的困扰,字符串的相关操作不会在本小节讨论。我们将在完成面向对象的学习后专门讲解String类。
java套接字编程相关搜索
-
j2ee
j2ee是什么
jar格式
java
java api
java applet
java c
java jdk
java list
java map
java script
java se
java socket
java swing
java switch
java web
java xml
java 程序设计
java 多线程
java 环境变量