一個簡單的C/S多線程應用

來源:互聯網
上載者:User

一個簡單的C/S多線程應用,稍微擴充就可以用了
/*socket是網路應用程式的核心,在伺服器端或用戶端網路應用程式中,socket皆為不可缺少的要素
*在伺服器常見的應用有:FTP伺服器,MAIL伺服器(SMTP,POP3,IMAP4協議),WEB(HTTP協議)
*建立伺服器端SOCKET的應用程式步驟如下:
*1。建立伺服器端的SOCKET,並且以此偵聽用戶端的串連請求
*2。當伺服器端偵測到來自用戶端的串連請求時則接收此請求並建立用戶端的SOCKET,該SOCEKT將作為
*  用戶端串連及後續處理髮送及接收資料的依據,至此則完成伺服器端與用戶端的SOCKET通訊連結
*3。處理來自用戶端的資訊,一般稱為請求,可視為用戶端的指令需求。例如HTTP通訊協定的URL請求,
*  或FTP通訊協定的FTP命令(如GET,PUT)等
*4。根據用戶端傳來的請求伺服器端需經過程式邏輯處理之後,發送回相對應的招待結果或錯誤資訊至
*  用戶端如HTTP伺服器鬚髮送回HTML網頁內容,而FTP伺服器則發送回FTP指令的結果
*5。當程式完成資料或命令的處理之後,便關閉SOCKET通訊連結
*/
/*
simpleServer.java
*/

import java.net.*;
import java.io.*;

public class  simpleServer
{
private static ServerSocket serverSocket;
private static listenClient listen;

public static void main(String[] args) throws Exception
{
int port;

if(args.length==0)
{
System.out.println("Usage:java simpleServer [port]");
System.exit(1);
}
port=Integer.parseInt(args[0]);
startServer(port);
}

public static void startServer(int port)throws Exception
{
try
{
serverSocket=new ServerSocket(port);
Thread thread=new Thread(new listenClient(serverSocket));
thread.start();
}
catch (IOException ex)
{
ex.printStackTrace();
}
}
}

class listenClient implements Runnable
{
private ServerSocket serverSocket;
private Socket clientSocket;

DataInputStream in;
DataOutputStream out;

public listenClient(ServerSocket serverSocket)throws Exception
{
this.serverSocket=serverSocket;
}

public void run()
{
try
{
while(true)
{
clientSocket=serverSocket.accept();
System.out.println("Connection from "+clientSocket.getInetAddress().getHostAddress());
in=new DataInputStream(clientSocket.getInputStream());
out=new DataOutputStream(clientSocket.getOutputStream());

String lineSep=System.getProperty("line.separator");//行分隔字元,即斷行符號換行

InetAddress addr=serverSocket.getInetAddress().getLocalHost();

String outData="Server Information: "+lineSep+"  Local Host: "+serverSocket.getInetAddress().getLocalHost()+lineSep+" port  :"+serverSocket.getLocalPort();
byte[] outByte=outData.getBytes();
out.write(outByte,0,outByte.length);
}
}
catch (Exception ex)
{
ex.printStackTrace();
}
}
};

/*用戶端SOCKET應用程式與伺服器端SOCKET應用程式的流程很相似,最大的差別在於:
*1。伺服器端SOCKET應用程式主要用於偵聽及接收用戶端的串連,而用戶端的SOCKET
*  應用程式則用於嘗試與伺服器端建立串連
*2。用戶端SOCKET應用程式發送資訊指令至伺服器端,並接收伺服器端所返回的結果;
*  而伺服器端SOCEKT應用程式則處理指示邏輯,並將結果或錯誤資訊發送至用戶端
*
*常見的用戶端應用有:CHAT用戶端,FTP用戶端,POP3用戶端,SMTP用戶端和TELNET用戶端
*建立用戶端SOCKET應用程式的步驟大致如下:
*1。建立用戶端SOCKET,在建立時需指定欲串連伺服器端的主機名稱(或IP)與INTERNET
*  通訊連接埠
*2。發送特定資訊或指令至伺服器端
*3。接收伺服器端返回的執行結果或錯誤資訊,並以特定格式顯示,例如HTTP通訊協定會通過
*  HTML顯示
*4。當用戶端不需伺服器端的處理時,便關閉SOCEKT通訊連結
*/

/*
simpleClient.java
*/
import java.net.*;
import java.io.*;

public class  simpleClient
{
private static Socket socket;
public static void main(String[] args)throws Exception
{
String host;
int port;
if(args.length <2)
{
System.out.println("Usage:java simpleClient [remote IP/Host] [port]");
System.exit(1);
}
host=args[0];
port=Integer.parseInt(args[1]);
connectServer(host,port);
}

public static void connectServer(String host,int port)
{
try
{
socket=new Socket(InetAddress.getByName(host),port);
DataInputStream in=new DataInputStream(socket.getInputStream());
DataOutputStream out=new DataOutputStream(socket.getOutputStream());

byte[] inByte=new byte[1024];
in.read(inByte);
String response=new String(inByte,0,inByte.length);
System.out.println("Message from server: ");
System.out.println(response.trim());
}
catch (UnknownHostException e)
{
e.printStackTrace();
}
catch(IOException ex)
{
ex.printStackTrace();
}
finally
{
try
{
socket.close();
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.