网络编程(二):浅谈Socket编程
2009-09-18 00:00:00 来源:WEB开发网《网络编程(一):初识Web通信 》中用一个C-S模式的例子简单介绍了一下Web通信的基本原理。有一点值得注意:处于网络通信两端的机器中的程序之间要互相发送消息,不得不创建Socket。那么Socket到底是什么。
很清楚,当申请Web服务的时候(比如向目标IP申请连接通信),必须要将消息发送到自定目标IP机器的确定端口上。但是有一个问题:如果同一台机器上有两个客户端程序需要同时向同一个服务器的同一个端口发送数据。这时监听端口的服务器如何区分这两个来自客户端不同程序发过来的请求,处理之后有如何准确的回送到两个客户端 不同的 程序中而不会搞错。
Socket技术的使用正式为了协调好网络程序间进程并发通信的问题。这里我编写了一个多线程并发响应请求的C-S模式的通信例子:其中ClienterA,ClienterB是两个客户端程序,Server是可以并发处理请求的服务器端程序。
Java代码
//Server完整源代码:
//可并发处理多客户端发来的请求
import java.net.*;
import java.io.*;
class ThreadHandler implements Runnable{
private Socket incomingSocket=null;
private int id=0;
ThreadHandler(Socket s,int id){
this.incomingSocket=s;
this.id=id;
}
public void run(){
try{
try{
//显示创建的Socket链接号
System.out.println("creat socket :"+id);
InputStream is=incomingSocket.getInputStream();
BufferedReader br=new BufferedReader(new InputStreamReader(is));
String information="";
while((information=br.readLine())!=null){
System.out.println("listen from ["+incomingSocket.getRemoteSocketAddress()+"]: \""+information+"\"");
}
//测试是否会阻塞等待客户端发送的消息
System.out.println("end a talking....");
}
finally{
incomingSocket.close();
}
}catch(IOException e){
e.printStackTrace();
}
}
}
public class Server{
private int listenerPort=8189;
private void listen(){
try{
int i=1;
ServerSocket serverSocket=new ServerSocket(listenerPort);
try{
//循环监听客户端发来的请求,一点链接成功,立刻处理
while(true){
Socket socket=serverSocket.accept();
Runnable r=new ThreadHandler(socket,i);
Thread thread=new Thread(r);
thread.start();
i++;
}
}
finally{
serverSocket.close();
}
}catch(IOException e)
{
e.printStackTrace();
}
}
public static void main(String[] args){
Server server=new Server();
server.listen();
}
}
更多精彩
赞助商链接