[关闭]
@lzb1096101803 2016-03-06T15:14:46.000000Z 字数 941 阅读 429

Socket相关

电话面试


基本步骤
确定协议(连接与非连接)
是发送还是接收数据

Socket 套接字的工作原理

一个 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方法)再对网络连接进行读写操作
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注