java

位置:IT落伍者 >> java >> 浏览文章

疯狂Java讲义:使用Socket进行通信[2]


发布日期:2020年02月12日
 
疯狂Java讲义:使用Socket进行通信[2]

程序清单codes///Clientjava

public class Client

{

public static void main(String[] args)

throws IOException

{

Socket socket = new Socket(

//将Socket对应的输入流包装成BufferedReader

BufferedReader br = new BufferedReader(

new InputStreamReader(socketgetInputStream()))

//进行普通IO操作

String line = brreadLine()

Systemoutprintln(来自服务器的数据 + line)

//关闭输入流socket

brclose()

socketclose()

}

}

上面程序中粗体字代码是使用ServerSocket和Socket建立网络连接的代码斜体字代码是通过Socket获取输入流输出流进行通信的代码通过程序不难看出一旦使用ServerSocketSocket建立网络连接之后程序通过网络通信与普通IO并没有太大的区别

先运行上面程序中的Server类将看到服务器一直处于等待状态因为服务器使用了死循环来接受来自客户端的请求再运行Client类将可看到程序输出来自服务器的数据您好您收到了服务器的新年祝福!这表明客户端和服务器端通信成功

上面程序为了突出通过ServerSocket和Socket建立连接并通过底层IO流进行通信的主题程序没有进行异常处理也没有使用finally块来关闭资源

实际应用中程序可能不想让执行网络连接读取服务器数据的进程一直阻塞而是希望当网络连接读取操作超过合理时间之后系统自动认为该操作失败这个合理时间就是超时时长Socket对象提供了一个setSoTimeout(int timeout)来设置超时时长如下的代码片段所示

Socket s = new Socket(

//设置秒之后即认为超时

ssetSoTimeout(

当我们为Socket对象指定了超时时长之后如果在使用Socket进行读写操作完成之前已经超出了该时间限制那么这些方法就会抛出SocketTimeoutException异常程序可以对该异常进行捕捉并进行适当处理如下代码所示

try

{

//使用Scanner来读取网络输入流中的数据

Scanner scan = new Scanner(sgetInputStream())

//读取一行字符

String line = scannextLine()

}

//捕捉SocketTimeoutException异常

catch(SocketTimeoutException ex)

{

//对异常进行处理

}

假设程序需要为Socket连接服务器时指定超时时长即经过指定时间后如果该Socket还未连接到远程服务器则系统认为该Socket连接超时但Socket的所有构造器里都没有提供指定超时时长的参数所以程序应该先创建一个无连接的Socket再调用Socket的connect()方法来连接远程服务器而connect方法就可以接受一个超时时长参数如下代码所示

//创建一个无连接的Socket

Socket s = new Socket()

//让该Socket连接到远程服务器如果经过秒还没有连接到则认为连接超时

sconnconnect(new InetAddress(host port)

返回目录疯狂Java讲义

编辑推荐

Java程序性能优化让你的Java程序更快更稳定

新手学Java 编程

Java程序设计培训视频教程

[] []

               

上一篇:疯狂Java讲义:使用ServletSocket创建TCP服务器端

下一篇:疯狂Java讲义:使用Socket进行通信[1]