@lzb1096101803
2016-03-06T15:14:46.000000Z
字数 941
阅读 435
电话面试
基本步骤
确定协议(连接与非连接)
是发送还是接收数据
一个 Socket 连接可以被看成是 5 个部分,协议、本地 IP、本地端口、远程 IP 和远程端口。Socket 可以被看做两个进程进行
通信的一个端点或者一个容器,一个进程将一段信息存入 Socket,Socket 负责将此段信息发给另一个进程的 Socket,而另一个进
程就可以通过 Socket 取得这段信息
SOCKET;建立新的通信端点
BIND:端点附加本地地址
LISTEN:自己处于愿意接受连接的状态
ACCEPT:客户端发一个CONNECT过来,服务器要给它一个应答,就是ACCEPT,表示我愿意接收
CONNECT:建立连接
CLOSE:
SEND:
RECEIVE
java.net.SocketTimeoutException:socket超时。
connect的时候,这个超时参数由connect(SocketAddress endpoint,int timeout)中的后者来决定;
setSoTimeout(int timeout),这个是设定读取的超时时间。它们设置成0均表示无限大。
java.net.BindException:Address already in use: JVM_Bind
与port一样的一个端口已经被启动,并进行监听。此时用netstat –an命令,可以看到一个Listending状态的端口。只需要找一个没有被占用的端口就能解决这个问题。
java.net.ConnectException: Connection refused: connect
指定ip地址的机器不能找到(也就是说从当前机器不存在到指定ip路由),或者是该ip存在,但找不到指定的端口进行监听。应该首先检查客户端的ip和port是否写错了,假如正确则从客户端ping一下服务器看是否能ping通,假如能ping通(服务服务器端把ping禁掉则需要另外的办法),则看在服务器端的监听指定端口的程序是否启动。
java.net.SocketException: Socket is closed
该异常在客户端和服务器均可能发生。异常的原因是己方主动关闭了连接后(调用了Socket的close方法)再对网络连接进行读写操作