JAVA進階-網路編程,java進階網路編程
>通過通訊端串連伺服器
Socket指代通訊端
>讀取任意網站的首頁
---------
/** * @author Lean @date:2014-10-9 */public class SocketSample {public static void main(String[] args) {BufferedWriter writer=null;Socket socket=null;try {while (true) {try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}socket=new Socket("localhost",8080);OutputStream outputStream=socket.getOutputStream();outputStream.write("GET / HTTP/1.0\n\n".getBytes());BufferedReader reader=new BufferedReader(new InputStreamReader(socket.getInputStream()));writer=new BufferedWriter(new OutputStreamWriter(new FileOutputStream("C:/Users/Administrator/Desktop/TheadSample.html")));String appendStr=null;while ((appendStr=reader.readLine()) != null) {//System.out.println(appendStr);writer.write(appendStr);}writer.close();reader.close();}} catch (UnknownHostException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}finally{if (socket!=null) {try {socket.close();} catch (IOException e) {e.printStackTrace();}}}}}---------
>通過url下載任意網頁
---------
/** * @author Lean @date:2014-10-9 */public class URLSample {public static void main(String[] args) {try {URL url=new URL("HTTP","www.baidu.com",80,"");//URL url=new URL("http://www.baidu.com");HttpURLConnection connection=(HttpURLConnection) url.openConnection();connection.connect();InputStream is=connection.getInputStream();byte[] buff=new byte[1024];int length=0;while ((length=is.read(buff))!=-1) {System.out.println(new String(buff));}} catch (MalformedURLException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}}---------
>檢測網站傳入的cookie資訊
---------
/** * @author Lean @date:2014-10-9 */public class HttpCookieSample {/** * @param args */public static void main(String[] args) {CookieManager manager=new CookieManager();manager.setCookiePolicy(new CustomerPolicy());CookieHandler.setDefault(manager);try {URL url=new URL("http://www.baidu.com");URLConnection conn=url.openConnection();Object content=conn.getContent();List<HttpCookie> cookies=manager.getCookieStore().getCookies();for (HttpCookie httpCookie : cookies) {System.out.println(httpCookie.getName()+" "+httpCookie.getValue()+" "+httpCookie.getDomain());printCookieLiveAge(httpCookie);System.out.println("Cookie secured:"+httpCookie.getSecure());System.out.println("...........");}} catch (MalformedURLException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}private static void printCookieLiveAge(HttpCookie httpCookie) {long age=httpCookie.getMaxAge();SimpleDateFormat df=new SimpleDateFormat("HH:mm:ss");System.out.println(age!=-1?"Cookie will expire when close ":"Cookie age is:"+df.format(age));}static class CustomerPolicy implements CookiePolicy{@Overridepublic boolean shouldAccept(URI uri, HttpCookie cookie) {return true;}}}---------
>編寫同時服務多個用戶端的伺服器程式
---------
/** * @author Lean @date:2014-10-9 */public class ServerSocketSample {private static ServerSocket server=null;public static void main(String[] args) {try {server=new ServerSocket(8080);ExecutorService pool=Executors.newFixedThreadPool(3);while (true) {Socket socketObject= server.accept();pool.submit(new CustomRunnable(socketObject));}} catch (IOException e) {e.printStackTrace();}}static class CustomRunnable implements Runnable{byte[] buff=new byte[512];private Socket socketObject;public CustomRunnable(Socket socketObject) {this.socketObject=socketObject;}@Overridepublic void run() {try {System.out.println("Thread ID>>"+Thread.currentThread().getId());InputStream stream=socketObject.getInputStream();stream.read(buff);OutputStream os=socketObject.getOutputStream();os.write(buff);socketObject.close();} catch (IOException e) {e.printStackTrace();}}}}---------
>編寫實際的檔案儲存體伺服器程式
---------
StorgeServerSample
/** * @author Lean @date:2014-10-10 */public class StorgeServerSample {public static void main(String[] args) {ServerSocket socket=null;ExecutorService service=Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors());try {socket=new ServerSocket(8080);try {while (true) {Socket socketObject=socket.accept();service.submit(new RequestRunnable(socketObject));}} finally{socket.close();}} catch (IOException e) {e.printStackTrace();}}static class RequestRunnable implements Runnable{private Socket requestSocket;public RequestRunnable(Socket socketObject) {requestSocket=socketObject;}@Overridepublic void run() {try {DataInputStream dataIs=new DataInputStream(requestSocket.getInputStream());DataOutputStream dataOs=new DataOutputStream(requestSocket.getOutputStream());int cmd=dataIs.readInt();String message=cmd==0?"Put ":"Get ";String fileName=dataIs.readUTF();message+=fileName+" REQUEST";fileName="C:/Documents and Settings/Administrator/案頭/Server.txt";if (cmd==0) {uploadFile(dataIs,fileName);}else {downFile(dataOs,fileName);}} catch (IOException e) {e.printStackTrace();}}private void uploadFile(DataInputStream dataIs, String fileName) {try {BufferedWriter writer=new BufferedWriter(new FileWriter(fileName));String tempStr;while (!(tempStr=dataIs.readUTF()).equals("-1")) {writer.write(tempStr);writer.newLine();}writer.close();dataIs.close();} catch (IOException e) {e.printStackTrace();}}private void downFile(DataOutputStream dataOs, String fileName) {try {BufferedReader reader=new BufferedReader(new FileReader(fileName));String tempStr=null;while ((tempStr=reader.readLine())!=null) {dataOs.writeUTF(tempStr);}dataOs.writeUTF("-1");dataOs.close();reader.close();} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}}}---------
StorgeClientSample
public class StorgeClientSample {public static void main(String[] args) {int cmd=1;try {Socket requestScoket=new Socket();requestScoket.connect(new InetSocketAddress("localhost",8080));if (cmd==0) {String fileName="C:/Documents and Settings/Administrator/案頭/Test.txt";BufferedReader reader=new BufferedReader(new FileReader(fileName));DataOutputStream dataOs=new DataOutputStream(requestScoket.getOutputStream());dataOs.writeInt(cmd);dataOs.writeUTF(fileName);String tempStr;while ((tempStr=reader.readLine())!=null) {System.out.println(tempStr);dataOs.writeUTF(tempStr);}dataOs.writeUTF("-1");dataOs.close();reader.close();}else {String fileName="C:/Documents and Settings/Administrator/案頭/Down.txt";BufferedWriter writer=new BufferedWriter(new FileWriter(fileName));DataOutputStream dataOs=new DataOutputStream(requestScoket.getOutputStream());dataOs.writeInt(cmd);dataOs.writeUTF(fileName);DataInputStream dataIs=new DataInputStream(requestScoket.getInputStream());String tempStr;while (!(tempStr=dataIs.readUTF()).equalsIgnoreCase("-1")) {System.out.println(tempStr);writer.write(tempStr);writer.newLine();}dataIs.close();writer.close();}} catch (IOException e) {e.printStackTrace();}}}---------
>建立多電波伺服器和用戶端
---------
StockTradesServer
/** * @author Lean @date:2014-10-11 */public class StockTradesServer {public static void main(String[] args) {Thread stockSThread=new Thread(new StockTradeGenerator());stockSThread.setDaemon(true);stockSThread.start();try {Thread.sleep(30000);} catch (InterruptedException e) {}}static class StockTradeGenerator implements Runnable{private DatagramSocket broadcastSocket;private String[] stockSymbols ={"IBM","SNE","XRX","MHP","NOK"};public StockTradeGenerator() {try {broadcastSocket=new DatagramSocket(4445);} catch (SocketException e) {System.out.println("error create socket ! ");}}@Overridepublic void run() {byte[] buff=new byte[126];try {while (true) {int index=(int) (Math.random()*5);float trade=generatorRandomTrade(index);String tempStr=String.format("%s %.2f@ %s",stockSymbols[index],trade,now());buff=tempStr.getBytes();InetAddress groupInetAddresses;groupInetAddresses = InetAddress.getLocalHost();DatagramPacket datagramPacket=new DatagramPacket(buff,buff.length, groupInetAddresses,4446);broadcastSocket.send(datagramPacket);Thread.sleep(500);}} catch (UnknownHostException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();} catch (InterruptedException e) {e.printStackTrace();}finally{broadcastSocket.close();}}}public static float generatorRandomTrade(int index) {float trade=(float) Math.random();switch (index) {case 0:trade+=118;break;case 1:trade+=29;break;case 2:trade+=8;break;case 3:trade+=26;break;case 4:trade+=14;break;default:break;} return trade;}public static Object now() {SimpleDateFormat df=new SimpleDateFormat("HH:mm:ss");Date date=new Date();return df.format(date);}}---------
StockTradeClient
/** * @author Lean @date:2014-10-11 */public class StockTradeClient {public static void main(String[] args) throws IOException {MulticastSocket multicastSocket=new MulticastSocket(4446);InetAddress address=InetAddress.getByName("232.0.1.1");multicastSocket.joinGroup(address);for (int i = 0; i < 10; i++) {byte[] buff=new byte[256];DatagramPacket datagramPacket=new DatagramPacket(buff,buff.length);multicastSocket.receive(datagramPacket);System.out.println(new String(datagramPacket.getData(),0,datagramPacket.getLength()));}multicastSocket.leaveGroup(address);multicastSocket.close();}}---------
java網路編程基礎知識
java基礎是必須要會的。
網路編程這部分其實沒什麼東西,對於線程和並發方面要求的高一些。
對於一些簡單應用來說,如果基礎好的話看兩個星期的書,做點聯絡就可以了。JAVA給提供了一套API,針對於TCP和UDP協議來操作,另外有關IO方面要瞭解。
如果研究深了的話就複雜了。各種協議的實現、系統底層操作等等很複雜,我也說不太明白,一步步來吧。
JAVA語言程式設計這本書裡有關於網路編程的知識,還有習題和例子,挺好。
java網路編程方向具體該怎去學
java的大方向就是j2ee
j2ee不僅僅是socket編程,具體包括13中核心技術。
J2EE的核心API與組件
J2EE平台由一整套服務(Services)、應用程式介面(APIs)和協議構成,它對開發基於Web的多層應用提供了功能支援,下面對J2EE中的13種技術規範進行簡單的描述(限於篇幅,這裡只能進行簡單的描述):
1. JDBC(Java Database Connectivity):
JDBC API為訪問不同的資料庫提供了一種統一的途徑,象ODBC一樣,JDBC對開發人員屏蔽了一些細節問題,另外,JDCB對資料庫的訪問也具有平台無關性。
2. JNDI(Java Name and Directory Interface):
JNDI API被用於執行名字和目錄服務。它提供了一致的模型來存取和操作企業級的資源如DNS和LDAP,本地檔案系統,或應用伺服器中的對象。
3. EJB(Enterprise JavaBean):
J2EE技術之所以贏得媒體廣泛重視的原因之一就是EJB。它們提供了一個架構來開發和實施分布式商務邏輯,由此很顯著地簡化了具有延展性和高度複雜的企業級應用的開發。EJB規範定義了EJB組件在何時如何與它們的容器進行互動作用。容器負責提供公用的服務,例如目錄服務、交易管理、安全性、資源緩衝池以及容錯性。但這裡值得注意的是,EJB並不是實現J2EE的唯一途徑。正是由於J2EE的開放性,使得有的廠商能夠以一種和EJB平行的方式來達到同樣的目的。
4. RMI(Remote Method Invoke):
正如其名字所表示的那樣,RMI協議調用遠程對象上方法。它使用了序列化方式在用戶端和伺服器端傳遞資料。RMI是一種被EJB使用的更底層的協議。
5. Java IDL/CORBA:
在Java IDL的支援下,開發人員可以將Java和CORBA整合在一起。他們可以建立Java對象並使之可在CORBA ORB中展開, 或者他們還可以建立Java類並作為和其它ORB一起展開的CORBA對象的客戶。後一種方法提供了另外一種途徑,通過它Java可以被用於將你的新的應用和舊的系統相整合。
6. JSP(Java Server Pages):
JSP頁面由HTML代碼和嵌入其中的Java代碼所組成。伺服器在頁面被用戶端所請求以後對這些Java代碼進行處理,然後將產生的HTML頁面返回給用戶端的瀏覽器。
7. Java Servlet:
Servlet是一種小型的Java程式,它擴充了Web伺服器的功能。作為一種伺服器端的應用,當被請求時開始執行,這和CGI Perl指令碼很相似。Servlet提供的功能大多與JSP類似,不過實現的方式不同。JSP通常是大多數HTML代碼中嵌入少量的Java代碼,而servlets全部由Java寫成並且產生HTML。
8. XML(Extensible Markup Language):
XML是一種可以用來定義其它標記語言的語言。它被用來在不同的商務過程中共用資料。
XML的發展和Java是相互獨立的,但是,它和Java具有的相同目標正是平台獨立性。通過將Java和XML的組合,您可以得到一個完美的具有平台獨立性的解決方案。
9. JMS(Java Message Service):
MS是用於和面向訊息的中介軟體相互連信的應用程式介面(API)。它既支援點對點的域,有支援發布&#......餘下全文>>