?? 一個(gè)簡(jiǎn)單的cs多線程應(yīng)用.txt
字號(hào):
一個(gè)簡(jiǎn)單的C/S多線程應(yīng)用,稍微擴(kuò)展就可以用了
/*socket是網(wǎng)絡(luò)應(yīng)用程序的核心,在服務(wù)器端或客戶端網(wǎng)絡(luò)應(yīng)用程序中,socket皆為不可缺少的要素
*在服務(wù)器常見的應(yīng)用有:FTP服務(wù)器,MAIL服務(wù)器(SMTP,POP3,IMAP4協(xié)議),WEB(HTTP協(xié)議)
*建立服務(wù)器端SOCKET的應(yīng)用程序步驟如下:
*1。建立服務(wù)器端的SOCKET,并且以此偵聽客戶端的連接請(qǐng)求
*2。當(dāng)服務(wù)器端偵測(cè)到來自客戶端的連接請(qǐng)求時(shí)則接收此請(qǐng)求并建立客戶端的SOCKET,該SOCEKT將作為
* 客戶端連接及后續(xù)處理發(fā)送及接收數(shù)據(jù)的依據(jù),至此則完成服務(wù)器端與客戶端的SOCKET通信鏈接
*3。處理來自客戶端的信息,一般稱為請(qǐng)求,可視為客戶端的指令需求。例如HTTP通信協(xié)議的URL請(qǐng)求,
* 或FTP通信協(xié)議的FTP命令(如GET,PUT)等
*4。根據(jù)客戶端傳來的請(qǐng)求服務(wù)器端需經(jīng)過程序邏輯處理之后,發(fā)送回相對(duì)應(yīng)的招待結(jié)果或錯(cuò)誤信息至
* 客戶端如HTTP服務(wù)器須發(fā)送回HTML網(wǎng)頁(yè)內(nèi)容,而FTP服務(wù)器則發(fā)送回FTP指令的結(jié)果
*5。當(dāng)程序完成數(shù)據(jù)或命令的處理之后,便關(guān)閉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應(yīng)用程序與服務(wù)器端SOCKET應(yīng)用程序的流程很相似,最大的差別在于:
*1。服務(wù)器端SOCKET應(yīng)用程序主要用于偵聽及接收客戶端的連接,而客戶端的SOCKET
* 應(yīng)用程序則用于嘗試與服務(wù)器端建立連接
*2。客戶端SOCKET應(yīng)用程序發(fā)送信息指令至服務(wù)器端,并接收服務(wù)器端所返回的結(jié)果;
* 而服務(wù)器端SOCEKT應(yīng)用程序則處理指令邏輯,并將結(jié)果或錯(cuò)誤信息發(fā)送至客戶端
*
*常見的客戶端應(yīng)用有:CHAT客戶端,F(xiàn)TP客戶端,POP3客戶端,SMTP客戶端和TELNET客戶端
*建立客戶端SOCKET應(yīng)用程序的步驟大致如下:
*1。建立客戶端SOCKET,在建立時(shí)需指定欲連接服務(wù)器端的主機(jī)名稱(或IP)與INTERNET
* 通信端口
*2。發(fā)送特定信息或指令至服務(wù)器端
*3。接收服務(wù)器端返回的執(zhí)行結(jié)果或錯(cuò)誤信息,并以特定格式顯示,例如HTTP通信協(xié)議會(huì)通過
* HTML顯示
*4。當(dāng)客戶端不需服務(wù)器端的處理時(shí),便關(guān)閉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();
}
}
}
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -