导航:首页 > 编程语言 > java网络编程实验总结

java网络编程实验总结

发布时间:2025-08-05 02:36:34

java网络技术编程

一、 客户端网络编程步骤
客户端(Client)是指网络编程中首先发起连接的程序,客户端一般实现程序界面和基本逻辑实现,在进行实际的客户端编程时,无论客户端复杂还是简单,以及客户端实现的方式,客户端的编程主要由三个步骤实现:
1、 建立网络连接
客户端网络编程的第一步都是建立网络连接。在建立网络连接时需要指定连接到的服务器的IP地址和端口号,建立完成以后,会形成一条虚拟的连接,后续的操作就可以通过该连接实现数据交换了。
2、 交换数据
连接建立以后,就可以通过这个连接交换数据了。交换数据严格按照请求响应模型进行,由客户端发送一个请求数据到服务器,服务器反馈一个响应数据给客户端,如果客户端不发送请求则服务器端就不响应。
根据逻辑需要,可以多次交换数据,但是还是必须遵循请求响应模型。
3、 关闭网络连接
在数据交换完成以后,关闭网络连接,释放程序占用的端口、内存等系统资源,结束网络编程。
最基本的步骤一般都是这三个步骤,在实际实现时,步骤2会出现重复,在进行代码组织时,由于网络编程是比较耗时的操作,所以一般开启专门的现场进行网络通讯。

二、服务器端网络编程步骤
服务器端(Server)是指在网络编程中被动等待连接的程序,服务器端一般实现程序的核心逻辑以及数据存储等核心功能。服务器端的编程步骤和客户端不同,是由四个步骤实现,依次是:
1、 监听端口
服务器端属于被动等待连接,所以服务器端启动以后,不需要发起连接,而只需要监听本地计算机的某个固定端口即可。
这个端口就是服务器端开放给客户端的端口,服务器端程序运行的本地计算机的IP地址就是服务器端程序的IP地址。
2、 获得连接
当客户端连接到服务器端时,服务器端就可以获得一个连接,这个连接包含客户端的信息,例如客户端IP地址等等,服务器端和客户端也通过该连接进行数据交换。
一般在服务器端编程中,当获得连接时,需要开启专门的线程处理该连接,每个连接都由独立的线程实现。
3、 交换数据
服务器端通过获得的连接进行数据交换。服务器端的数据交换步骤是首先接收客户端发送过来的数据,然后进行逻辑处理,再把处理以后的结果数据发送给客户端。简单来说,就是先接收再发送,这个和客户端的数据交换数序不同。
其实,服务器端获得的连接和客户端连接是一样的,只是数据交换的步骤不同。
当然,服务器端的数据交换也是可以多次进行的。
在数据交换完成以后,关闭和客户端的连接。
4、 关闭连接
当服务器程序关闭时,需要关闭服务器端,通过关闭服务器端使得服务器监听的端口以及占用的内存可以释放出来,实现了连接的关闭。
其实服务器端编程的模型和呼叫中心的实现是类似的,例如移动的客服电话10086就是典型的呼叫中心,当一个用户拨打10086时,转接给一个专门的客服人员,由该客服实现和该用户的问题解决,当另外一个用户拨打10086时,则转接给另一个客服,实现问题解决,依次类推。
在服务器端编程时,10086这个电话号码就类似于服务器端的端口号码,每个用户就相当于一个客户端程序,每个客服人员就相当于服务器端启动的专门和客户端连接的线程,每个线程都是独立进行交互的。
这就是服务器端编程的模型,只是TCP方式是需要建立连接的,对于服务器端的压力比较大,而UDP是不需要建立连接的,对于服务器端的压力比较小罢了。

Ⅱ 浅谈Java中如何利用socket进行网络编程(一)

Socket是网络上运行的两个程序间双向通讯的一端,它既可以接受请求,也可以发送请求,利用它可以较为方便的编写网络上的数据的传递。在java中,有专门的socket类来处理用户的请求和响应。利用SOCKET类的方法,就可以实现两台计算机之间的通讯。这里就介绍一下在JAVA中如何利用socket进行网络编程。 在Java中Socket可以理解为客户端或者服务器端的一个特殊的对象,这个对象有两个关键的方法,一个是getInputStream方法,另一个是getOutputStream方法。getInputStream方法可以得到一个输入流,客户端的Socket对象上的getInputStream方法得到的输入流其实就是从服务器端发回的数据流。GetOutputStream方法得到一个输出流,客户端Socket对象上的getOutputStream方法返回的输出流就是将要发送到服务器端的数据流,(其实是一个缓冲区,暂时存储将要发送过去的数据)。 程序可以对这些数据流根据需要进行进一步的封装。本文的例子就对这些数据流进行了一定的封装(关于封装可以参考Java中流的实现部分)。 一、建立服务器类 Java中有一个专门用来建立Socket服务器的类,名叫ServerSocket,可以用服务器需要使用的端口号作为参数来创建服务器对象。ServerSocket server = new ServerSocket(9998) 这条语句创建了一个服务器对象,这个服务器使用9998号端口。当一个客户端程序建立一个Socket连接,所连接的端口号为9998时,服务器对象server便响应这个连接,并且server.accept()方法会创建一个Socket对象。服务器端便可以利用这个Socket对象与客户进行通讯。Socket incoming = server.accept() 进而得到输入流和输出流,并进行封装BufferedReader in = new BufferedReader(new InputStreamReader(incoming.getInputStream())); PrintWriter out = new PrintWriter(incoming.getOutputStream(),true); 随后,就可以使用in.readLine()方法得到客户端的输入,也可以使用out.println()方法向客户端发送数据。从而可以根据程序的需要对客户端的不同请求进行回应。

Ⅲ Java网络编程从入门到精通(6):使用getCanonicalHostName方法获得主机名

getCanonicalHostName方法和getHostName方法一样 也是得到远程主机的域名 但它们有一个区别 getCanonicalHostName得到的是主机名 而getHostName得到的主机别名 getCanonicalHostName的定义如下

()

在访问某些域名时 getCanonicalHostName方法和getHostName方法的返回值是一样的 这和DNS服务器如何解释主机名和主机别名以及它们的设置有关 如通过创建InetAddress对象后 使用getCanonicalHostName方法和getHostName方法返回的结果都是(有时直接返回IP地址 这可能和IBM的DNS服务器的处理机制有关岩游弊) 如果DNS不允许通过IP地址得到域名 那么这两个方法就会返回IP地址来代替域名 getCanonicalHostName方法可以分三种情况来讨论

使用getLocalHost创建InetAddress对象

在粗族这种情况下getCanonicalHostName方法和getHostName方法得到的都是本机名

使用域名创建InetAddress对象

在这种情况下 getCanonicalHostName方法是否要访问DNS服务器 取决于DNS服务器如何解释主机名和主机别名 也就是说 是否在创建InetAddress对象时就将主机名和主机别名都确定了 在前面已经讲过 使用域名创建InetAddress对象后 调用getHostName方法不会访问DNS服务器 但getCanonicalHostName方法就不一定了 这和DNS服务器的设置有关 如就需要访问DNS服务器 而就不需要访问DNS服务器

使用IP地址创建InetAddress对象

在这种情况下 getCanonicalHostName方法和getHostName方法是完全一样的 也就是说 它们得到的都是主机名 而不是主机别名

之所以要使用主机别名 是因为有时主机名可能比较复杂 如Oracle官方网站的主机名bigip o 因此 为了使用户访问网站更方便 就增加了更简单的主机别名 如 一个主机名可能对应多个主机别名 如也是Oracle的主机别名 在IE的地址栏中输入和都可以访问Oracle官方网站 但我们发现 有很多网站通过主机名无法访问 只有通过一些别名才能访问 如 只能通磨册过和两个主机别名访问 而不能通过它的主机名 cn来访问 这是因为在服务端通过HTTP协议做了限制 这个在前面已经讨论过了 例程 对比了getCanonicalHostName和getHostName方法在不同情况下的输出结果

package mynet;import *;publicclass DomainName{publicstaticvoidoutHostName(InetAddressaddress Strings){System out println( 通过 +s+ 创建InetAddress对象 );System out println( 主机名: +address getCanonicalHostName());System out println( 主机别名: +address getHostName());System out println( );}publicstaticvoidmain(String[]args)throwsException{outHostName(InetAddress getLocalHost() getLocalHost方法 );outHostName(InetAddress getByName( ) );outHostName(InetAddress getByName( ) );outHostName(InetAddress getByName( ) );outHostName(InetAddress getByName( ) );}}

运行结果

通过getLocalHost方法创建InetAddress对象主机名:ComputerName主机别名:ComputerName通过创建InetAddress对象主机名:主机别名:通过创建InetAddress对象主机名: cn主机别名:通过 创建InetAddress对象主机名: cn主机别名: cn通过 创建InetAddress对象主机名: 主机别名:

lishixin/Article/program/Java/hx/201311/26659

Ⅳ Java网络编程从入门到精通(12):使用isReachable方法探测主机是否可以连通

在J SE 中的InetAddress类中增加了一个isReachable方法 可以使用这个方法来探测主机是否可以连通 这个方卖山隐法有两个重载形式 它们的定义如下

publicbooleanisReachable(int唯肆timeout)(NeorkInterfacenetif intttl inttimeout)throwsIOException

第一个重载形式有一个timeout参数 可以通过这个参数设置连接超时(单位 毫秒) 第二个重载形式多了两个参数 netif和ttl 通过netif参数可以使用一个NeorkInterface对象来确定客户端使用哪个网络接口来测试主机的连通性 ttl是指测试连通性过程中的最大连接跃点数(从客户机到达远程主机所经过的最大路由数就是最大连接跃点数 一个路由被称为一个跃点 在Windows网络连接中的 高级TCP/IP设置 对话框最下面可以设置接口跃点数) 如果达到最大连接跃点数 还没找到远程主机 isReachable方法就认为客户机和远程主机之间是不可连通的

isReachable方法是通过连接主机的echo端口来确定客户端中厅和服务端是否可连通 但在Internet上使用这个方法可能会因为放火墙等因素而无法连通远程主机(实际上 远程主机是可以连通的) 因此 isReachable在Internet上并不可靠 但我们可以将isReachable方法应用于局域网中

lishixin/Article/program/Java/hx/201311/27058

Ⅳ 如何学习网络编程

学习网络编程可以从以下几个步骤进行:

  1. 选择合适的编程语言

    • Java:Java是实现网络编程的入门好选择,因为其语法简洁且拥有丰富的网络编程库。
    • Python:Python也是一个非常适合初学者的语言,其互动性强,可以迅速上手,并且拥有丰富的网络编程库和工具。
    • C++与Winsock:相对复杂,但适合需要更底层控制和优化的场景。
  2. 掌握基础概念

    • IP地址:理解IP地址的概念和分类,包括IPv4和IPv6。
    • 端口号:了解端口号的作用和范围,以及如何在网络编程中使用。
    • Socket:掌握Socket的基本概念和工作原理,这是网络编程的核心。
  3. 理解C/S模型

    • ClientServer模型:深入理解服务端和客户端的交互方式,以及各自的功能和职责。
  4. 学习Socket API

    • API分类:学习创建、绑定、监听、接受连接、收发数据、关闭连接等Socket API。
    • 功能与参数:关注每个API的功能和参数意义,这是正确使用API的关键。
  5. 实践Socket编程

    • 使用Python互动平台:通过Python实践Socket API的用法,变换参数观察调用结果。
    • 实现简单规约:如echo、time等,通过cmd中的telnet等工具进行测试。
  6. 学习I/O模型

    • 阻塞与非阻塞:理解阻塞和非阻塞I/O模型的工作原理和适用场景。
    • 反应式I/O:学习select、poll、WaitForMultipleObject等反应式I/O模型。
  7. 深入学习

    • 阅读经典书籍:如Richard Stevens的《Unix网络编程》,深入理解API原理和服务端设计原理。
    • 编写代码:通过编写代码将所学知识应用到实际项目中。
  8. 提高编程效率

    • 使用高性能框架:如Twisted等,提高网络编程的效率和可靠性。
  9. 拓展知识

    • 学习设计模式:了解常见的设计模式,如单例模式、工厂模式等,在网络编程中的应用。
    • 操作系统知识:学习线程、进程、同步等操作系统知识,有助于更好地理解和优化网络编程。
  10. 持续学习与实践

    • 关注行业动态:关注网络编程领域的最新技术和趋势。
    • 不断实践:通过参与项目或自己开发小项目来不断巩固和提升网络编程能力。
阅读全文

与java网络编程实验总结相关的资料

热点内容
人工智能算法是多少位进制 浏览:920
发出命令的人 浏览:515
androidmainxml 浏览:109
des可逆加密算法 浏览:249
aix查看系统信息常用命令 浏览:154
phpmemcache实例 浏览:249
爆枪源码 浏览:567
编程大佬能记住所有代码 浏览:859
如何批量注册国家反诈app 浏览:527
实现ping命令 浏览:19
cmd进入管理员命令 浏览:479
pdf在线编辑修改 浏览:967
文件夹是只读是什么意思 浏览:88
服务器如何知道访问域名 浏览:319
java网络编程实验总结 浏览:87
linux下dns服务器配置 浏览:707
我的命令是绝对的 浏览:932
助飞器app在哪里下 浏览:64
无广告win10解压缩 浏览:476
台湾的服务器怎么选云服务器 浏览:813