`
lindingyu
  • 浏览: 29056 次
  • 性别: Icon_minigender_1
  • 来自: 湖南
文章分类
社区版块
存档分类
最新评论

网络通信中的常见问题

阅读更多
1.Ip,port错误,port被占用
      每台电脑都有一个固定的IP,而仅用IP地址,无法区分电脑的多层次应用,因此,每个服务器会有一个唯一的port,值是范围在1~65536之间的整数。 如果常见服务器时,用的port是在1~65536之外,则会port错误,出现异常。 将port改到1~65536的可用范围内便可解决问题。
    代码示例:
Class  RemoteServer
public void setUpServer(int port){
try{
//创建服务器对象
java.net.ServerSocket ser = new java.net.ServerSocket(port);
//等待客户进入
java.net.Socket client = ser.accept();

主函数调用
     RemoteServer rs = new RemoteServer();
     rs. setUpServer(600000);//port越界 大于65536

出现异常:
      java.lang.IllegalAccessException:port value out of range :600000
     
     如果port已经被应用,却又在这个端口创建服务器,则会由于port的重复占用产生异常。代码如上,改变port到1~65536内,连续调用便会出现port被占用异常。

出现异常:
      java.net.BindException:Address already in use 。

附:系统中已被占用的port表
端口      协议/应用          说明
21 ftp
23 telnet
25 Smtp
80 http
1433 SQL server          数据库
1099 RMI                 Java远程调用监听端口
1521 ORACLE监听器          Oracle数据库服务监听端口
8080 Tomcat服务器
9191 webLogic服务器

      ip错误与port错误类似,当客户端连接服务器时,需要输入服务器的ip地址。若ip错误,则不能连接服务器。确定服务器的ip后,在客户端输入正确ip,连接即可。

异常: java.net.ConnectException 该异常发生在客户端进行new Socket(ip, port)操作时,该异常发生的原因是或者具有ip地址的机器不能找到(也就是说从当前机器不存在到指定ip路由),或者是该ip存在,但找不到指定的端口进行监听。



2.服务器和客户端的通信协议不匹配
     要服务器与客户端之间完成通信,就必须制定相应的协议,以区别不同类型的信息。但如果信息发送端和接受端的协议内容不能匹配,通信仍旧无法完成,而且会出现异常。

代码示例: (简单的协议)

  Server端:
    byte[] data = ServerTools.getScreen();   
    if(data!=null){
    ous1.writeByte(1);//1 发送屏幕信息
    ous1.writeInt(data.length);
    ous1.write(data);
}//服务器发送截屏信息,协议规定:

  byte代表信息的类型   int信息的长度   data[]信息内容


Client端 :
  byte type = ins1.readByte();
  if(type==1){
  int len = ins1.readInt();
  byte[] data = new byte[len];
  ins1.read(data);
根据协议规定,client端读取信息的规则是:

读取一个byte确定信息内容   读取int得到信息长度     读取信息内容

这样,Server端和Client端的协议就可以完成信息的传递,否则,通信就无法完成。



3.读取信息时,几种读取信息方式的区别
   A,read(data[])
      将数据读取到data[]数组中,如果要读取的数据长度小于数组的长度,则先将所有数据读取到数组中,剩下的数组空间用0填充。返回读取字节的长度,int型。 如果流位于文件末尾而不能读取字节,或者流已关闭,其他I/O错误,会抛出IOException.
     
   B,readfully(data[])    
      同样是将数据读取到data[]数组中,但是必须输入数据的b.length个字节是有效的。没有返回值。
      若检测到文件末尾,而数组却没有取满,则会出现EOFException异常。
如果流位于文件末尾而不能读取字节,或者流已关闭,其他I/O错误,会抛出IOException.
代码示例:
java.io.FileInputStream ins = new java.io.FileInputStream(src);
java.io.DataInputStream dins = new java.io.DataInputStream(ins);
byte[] data = new byte[10];
dins.readFully(data);
如果读取的src文件源中的内容小于10个字节 :abcde
  运行:出现EOFException异常
      java.io.EOFException
     

   C,直接循环读取
    for(int i=0;i<data.length;i++){
      read(data[i]);
}
读取方式简单明了,返回值为int型。若如流中读取的字节为空,则返回-1;



4.内存溢出
       程序占用内存过大,电脑不能支持运行程序所需的内存。
代码示例:
   while(true){
      ServerThread st = new ServerThread(client);
      st.start();
  }
死循环启动线程,导致内存溢出

出现异常: java.lang.OutOfMemoryError

另外 当服务器和客户端协议不匹配时,也有可能造成内存溢出。

服务器
byte代表信息的类型    byte接受信息的条件     int信息的长度  data[]信息内容

客户端
    读取一个byte     读取int得到信息长度   Data[]读取信息内容
显然协议不匹配,这样程序运行下去,也会造成内存溢出。



5.EOFException 和 IOException.

  EOFException异常:输入流已经读取到了文件末尾,而数组还没有填满,则会出现。

代码示例:
//src是读取文件源
java.io.FileInputStream ins = new java.io.FileInputStream(src);
java.io.DataInputStream dins = new java.io.DataInputStream(ins);
byte[] data = new byte[10];
dins.readFully(data);
给定文件src的大小是 5个字节

运行结果会出现异常是: java.io.EOFException

IOException异常:流创建在文件的结尾,读取不到内容,或者其他的I/O异常。




6.断开(正常的异常)
      服务器和客户机成功连接后,需要结束连接时,由于服务器和客户机的连接失败出现异常,但这算是正常的。

异常:
      java.net.SocketException  该异常在客户端和服务器均可能发生。该异常在客户端和服务器端均有可能发生,引起该异常的原因有两个,第一个就是如果一端的Socket被关闭(或主动关闭或者因为异常退出而引起的关闭),另一端仍发送数据,发送的第一个数据包引发该异常。另一个是一端退出,但退出时并未关闭该连接,另一端如果在从连接中读数据则抛出该异常。简单的说就是在连接断开后的读和写操作引起的。





7. try  catch 和 throw Exception
  Try{
}catch(Exception ef){
}      该语句的功能是,抓捕异常。并可以对异常进行处理,如打印输出异常,访问异常跟踪信息等。这种异常处理使得程序更健壮,方便排除异常。
Throw  Exception  该语句是抛出异常,不会抓取和处理。异常发生时,该语句只会指出有异常发生,但是不会进行下一步的处理。

同样一个问题: 文件输入流找不到目标文件。
try  catch 语句的结果:
    java.io.FileNotFoundException   
       打印出异常,指出异常的具体内容。

throw Exception 语句的结果:
    Exception in thread "main" java.lang.Error:
              Unhandled exception type: IOException
       只是指出有异常发生,没有进一步处理。




















分享到:
评论

相关推荐

    基于计算机网络通信常见问题及管控措施.pdf

    【计算机网络通信常见问题及管控措施】 随着计算机技术在通讯领域的深入应用,网络通信已成为现代社会不可或缺的一部分,极大地推动了信息的高效传输和资源共享。然而,伴随着网络通讯技术的发展,一些安全问题也日...

    网络通信产品FAQ常见问题培训.ppt

    中低端网络产品常见故障排错,路由器,网关,交换接入, 无线AP AC课程介绍 故障排错整体思路 故障定位常用命令和工具 故障相关信息查看及分析 典型案例分析

    电力网络通信常见的故障.doc

    然而,电力网络通信系统在实际运行中常常遇到多种故障,影响其性能和安全性。以下是对这些常见故障的详细分析: 1. 电力网络通信系统可靠性差 电力网络通信系统的可靠性是其能否稳定运行的关键。当系统中心或某个...

    谈计算机网络通信常见问题及技术发展.pdf

    谈计算机网络通信常见问题及技术发展.pdf

    计算机网络通信常见问题及其技术发展概论.pdf

    计算机网络通信常见问题及其技术发展概论.pdf

    计算机网络通信常见问题及技术发展研究.pdf

    计算机网络通信常见问题及技术发展研究.pdf

    网络通信开发包

    在网络通信中,控件可以用来显示连接状态、传输进度等信息,或者提供发送和接收数据的界面。通过这些控件,开发者可以构建直观的用户界面,提高用户的操作体验。 再者,源码是学习和理解网络通信开发包的关键。源码...

    网络通信基本知识

    网络通信基本知识 本资源摘要信息涵盖了网络通信的基础知识,涵盖了网络通信的历史发展、网络标准化过程、网络类型、协议组成、OSI 参考模型、TCP/IP 参考模型等方面的知识。 一、网络通信的历史发展 网络通信的...

    Linux与Windows系统间的网络通信.pdf

    Socket 编程是实现网络通信的一种常见方法。Socket 是一种特殊的文件描述符,在进程之间进行网络通信时,需要使用 Socket 来传输数据。在 Linux 和 Windows 操作系统中,Socket 编程都可以使用,但是在实现方式和...

    网络通信java代码

    在这个过程中,我们将探讨TCP(传输控制协议)和UDP(用户数据报协议)这两种常见的网络通信协议,以及Java中用于网络编程的相关类库。 首先,Java提供了`java.net`包,这个包包含了处理网络通信所需的所有类。例如...

    谈计算机网络通信常见问题及技术发展 (1).pdf

    谈计算机网络通信常见问题及技术发展 (1).pdf

    Linux环境下基于Socket的网络通信.pdf

    Linux 环境下基于 Socket 的网络通信是指在 Linux 操作系统中使用 Socket 编程来实现网络通信的技术。Socket 是一种通过网络进行通信的方法,它允许不同的进程在同一台计算机或不同的计算机之间进行通信。 Linux ...

    易语言 网络通信例子

    在“易语言网络通信例子”这个主题中,我们将深入探讨如何使用易语言进行客户端和服务端的网络通信。 网络通信是计算机科学中的一个重要领域,它涉及两个或多个设备之间的数据交换。在易语言中,我们可以通过构建...

    数据加密技术在计算机网络通信安全中的应用 (8).pdf

    数据加密技术在计算机网络通信安全中的应用 数据加密技术是计算机网络通信安全中的一个重要组成部分。随着计算机网络技术的不断发展,人们的生活、工作方式和生活态度都发生了改变。计算机网络通信技术改变了人们的...

    解决未加载db-library网络通信层rar

    标题提到的问题“解决未加载db-library网络通信层rar”是一个常见的数据库连接错误,特别是在较旧的操作系统如Windows 98和Windows 2000上。db-library是IBM的DB2数据库系统的一个组件,用于处理与数据库服务器的...

    实现P2P网络通信.rar

    《实现P2P网络通信——基于Java的深度解析》 P2P(Peer-to-Peer)网络通信是一种去中心化的网络架构,其中每个节点既是服务的提供者也是服务的消费者。这种模式在分布式系统、文件共享、流媒体传输等领域有着广泛...

    JAVA网络编程常见问题与答案

    在 JAVA 网络编程中,SOCKET 语句是用来实现网络通信的重要工具。Socket(host, port) 和 ServerSocket.accept() 用来建立 TCP 三次握手连接,而 Socket.close() 是用来关闭 TCP 连接的。ServerSocket(port) 和 ...

    Visual_C++网络通信编程实用案例精选

    这些案例不仅有助于读者巩固理论知识,还能让他们了解到实际项目开发中的常见问题和解决策略。 总的来说,《Visual_C++网络通信编程实用案例精选》是一本全面介绍Visual C++环境下网络编程的实用书籍,涵盖了从基础...

    常见网络通信设备.pptx

    常见网络通信设备.pptx

    网络工程师面试常见技术问题

    网络工程师面试常见技术问题 本资源摘要信息涵盖了网络工程师面试常见技术问题,涵盖了网络基础知识、网络设备、网络协议、网络安全、Windows 系统类等多个方面的知识点。 一、网络基础知识 1. 检测 TCP/IP 正常...

Global site tag (gtag.js) - Google Analytics