最近找了找方向,随便翻了翻书,先写一些和主线无关的吧,socket连接的使用。
首先,如何连接远端的网络服务器。
先从最基本的说起:
Socket s = new Socket(...);
as.setSoTimaOut(1000);
try{
InputStream in = s.getInputStream();
} catch(InterruptedIOException exception) {
react to timeout
}
此代码有一个问题,如果使用new socket(String host, int port)这个构造器的话,会一直无限期阻塞下去,直到建立连接成功。所以推荐做法为:
Socket s = new Socket();
s.connect(new InetSocketAddress(host, port), timeout);
其实,java封装了所有连接服务器的细节,所以,我们使用起来会非常的方便。
网络地址一般的获得方式为
InetAddress address = InetAddress.getByName("www.baidu.com");
byte[] addressBytes = address.getAddress();
//如果很多ip来实现负载均衡,则会有很多主机地址
byte[] address = InetAddress.getAllByNames(hst);
讲完客户端,服务端也要讲了,首先还是最基本的:
ServerSocket s = new ServerSocket(8199);
//下面的命令一下,你的程序就被hold住了哦
Socket incoming = s.accept();
//直到程序有了输入
try{
InputStream inStream = incoming.getInputStream();
OutputStream outStream = incoming.getOutputStream();
Scanner in = new Scanner(inStream);
PrintWriter out = new PrintWriter(outStream, true);
out.print;n("Hello! Enter BYE to exit.");
boolean done = false;
while(!done && in.hasNextLine()){
String line = in.nextLine();
out.println("Echo" + line);
if (line.trim().equals("BYTE")) done = true;
}
} finally {
incoming.close();
}
catch(IOException e) {
xxxx
}
}
一般情况,服务器不可能一对一的应对访问,所以需要线程加以支撑:
替换相应的s.accept()
while(true){
Socket incoming = s.accept();
Runnable r = new ThreadedEchoHandler(incoming);
Thread t = new Thread(r);
t.start();
i++;
}
这样服务器端就可以处理多个客户端的请求了。
下来,还有一个问题,如果客户端想在建立连接的时候中断请求,应该怎么办呢?有一法:
可以使用java.nio包提供的一个特性:SocketChannel类。
SocketChannel channel = SocketChannel.open(new InetSocketAddress(host, port));
Scanner in = new Scanner(channel);
//Channels的静态方法
OutputStream outputStream = Channels.newOutputStream(channel);
这样,如果使用线程的中断interrupt(),那么线程将不会陷入阻塞,而是以异常的方式结束。具体客户端的访问线程是否可以从访问处直接到异常处,各位自己写写程序实验吧。睡觉!呵呵。
分享到:
相关推荐
在高并发的网络环境中,频繁地创建和销毁Socket连接会导致大量的系统资源浪费,影响整体性能。为了解决这个问题,开发人员通常会使用连接池来管理和复用已建立的Socket连接。 首先,我们来看一下Socket的基本概念。...
Socket连接池是网络编程中一个重要的优化手段,它在C#中主要应用于提高网络通信的效率和稳定性。本文将深入探讨“C# Socket连接池”的实现原理、优势以及如何利用线程池技术来构建和优化它。同时,我们也会提及...
Socket连接在IT行业中是网络编程中的重要组成部分,主要用于实现客户端与服务器之间的通信。TCP(Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议,它是Socket连接常用的底层...
在本场景中,“Socket连接控制打印机输出”指的是利用Socket连接远程打印机,仅需知道打印机的IP地址,即可实现对打印机的打印控制。这种方式通常适用于局域网或互联网环境中的设备管理,比如远程办公或分布式打印...
无论是Linux还是Windows操作系统,开发者都需要了解如何判断一个Socket连接的状态,以便于处理异常情况,保证程序的稳定性和可靠性。本文将深入探讨在Linux和Windows环境下,如何通过编程来检测Socket连接是否已断开...
Java Socket连接池是一种优化网络通信性能的技术,它允许应用程序复用已经建立的Socket连接,从而减少因频繁创建和销毁Socket连接而产生的开销。在高并发的服务器环境中,Socket连接池能够有效地提升系统效率和响应...
### Socket连接池的简单应用 #### 一、引言 在网络通信中,Socket作为一种基本的通信方式被广泛应用。然而,在实际开发过程中,直接使用系统自带的Socket库可能会遇到各种复杂性和性能上的挑战。例如,频繁地建立...
本篇文章将深入探讨VB中封装Winsock API的Socket连接类,帮助你理解其工作原理和应用。 Winsock,即Windows Socket,是微软为Windows操作系统提供的TCP/IP协议接口。它提供了一套标准的应用程序编程接口(API),...
Socket连接管理器是一种在计算机网络编程中用于管理多个Socket连接的工具或框架。它通常用于服务器端,帮助处理并发客户端的连接请求,有效地管理和维护这些连接的状态,以便于数据的高效传输。在这个场景中,"一个...
本文将详细解析"iOS下的Socket连接demo",并介绍相关的知识点。 首先,Socket通常被称为套接字,是应用层与传输层之间的一个抽象接口,允许应用程序通过网络发送和接收数据。它提供了进程间通信(IPC)的能力,使得...
在这个"Socket连接示例代码"中,我们将深入探讨Socket的基本概念、工作原理以及如何通过客户端和服务器进行本地或局域网通信。 首先,Socket在计算机网络中扮演着桥梁的角色,它允许两个程序(通常是一个服务器和一...
本主题将深入探讨“C# Socket连接服务器”的相关知识,包括如何建立连接、发送和接收数据,以及如何检测客户端的在线状态。 首先,Socket在计算机网络中是一种基于TCP/IP协议的通信方式,它允许两台或多台计算机...
windows 2008 R2解决socket连接不释放补丁包_time-wait过多注册表修改, Windows time_wait过多解决办法解决办法: 修改注册表中的tcpip的TIMEWAIT回收时间属性值,需要重启后生效 在HKEY_LOCAL_MACHINE\SYSTEM...
"fx5以太网socket连接 测试ok.zip"这个文件名暗示了一个使用FX5系列PLC(可编程逻辑控制器)进行以太网Socket通信的测试项目。FX5是三菱电机推出的一款高端PLC,具备强大的网络通讯功能,适用于自动化控制系统的集成...
Socket连接工具是一款强大的网络调试与检测软件,专为软件开发人员设计,旨在简化网络通信的测试和调试过程。它能够帮助开发者创建本地的Socket服务器(Server)和客户端(Client),支持两种主要的网络传输协议:...
易语言socket连接超时例程源码,socket连接超时例程,子程序1,socket,htons,inet_addr,Connect,closesocket,WSAStartup,setsockopt,ioctlsocket,select
Android Socket连接,包含心跳检测,断线重连,数据发送等等 博客地址:http://blog.csdn.net/yuzhiqiang_1993/article/details/78094909
一个java socket连接池的典型实例 SocketClient,客户端测试类 SocketAdapter继承Socket类,重新封装socket类 SocketConnectionPool,连接池管理类 StartupSocketServer,socket服务器端的主线程,负责监听端口,当有...
4种方法实现socket数据转发,socket 连接http 服务器. 内有socket,select,poll,多线程等的详细实例