Java Socket入门实例
生活随笔
收集整理的這篇文章主要介紹了
Java Socket入门实例
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
? ? 基于測試驅(qū)動的Socket入門實例(代碼的具體功能可以看我的程序中的注釋,不理解的可以短信我)
? ?先看Server的代碼:
? ?package socketStudy;
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.ServerSocket; import java.net.Socket; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.List; import org.apache.log4j.Logger;/*** 類ServerSocket.java的實現(xiàn)描述:*/ public class Server {private static final Logger log = Logger.getLogger("actionLog");private ServerSocket server;private List<String> list = new ArrayList<String>();public Server(int port) throws IOException{server = new ServerSocket(port);}/*** 啟動server的監(jiān)聽程序,當server關(guān)閉的時候停止監(jiān)聽* * @throws IOException*/public void listen() throws IOException {Socket client;String temp;BufferedReader br = null;//如果當前server已經(jīng)手動關(guān)閉,則終止監(jiān)聽while (!server.isClosed()) {// 每當檢測到套接字,就獲得一個socket鏈接// 這個方法在連接傳入之前,一直阻塞client = server.accept();//注意這里只需要獲取一次client的輸入流即可br = new BufferedReader(new InputStreamReader(client.getInputStream()));temp = br.readLine();while (temp != null) {list.add(temp);temp = br.readLine();}//這里立即關(guān)閉了client,事實上可以建立個timeOut時間if(client.isClosed()){client.close();}br.close();}}/*** 每次都返回當前的套接字的傳入內(nèi)容<br/>* 在返回后清空當前的list* * @return List<String>*/public synchronized List<String> getList() {List<String> newArrayList=new ArrayList<String>(Arrays.asList(new String[list.size()]));Collections.copy(newArrayList, list);list.clear();return newArrayList;}/*** 返回當前server是否成功綁定上指定接口<br/>* true表示成功綁定,false則表示沒有綁定* * @return boolean */public boolean isBound() {return server.isBound();}/*** 關(guān)閉當前server*/public void close() {if (server != null) {try {server.close();} catch (IOException e) {log.error(e.getMessage(), e);}}}@Overridepublic String toString() {return this.server.toString();}}?
?
? ?再看client的程序示例;
? ?package socketStudy;
import java.io.IOException; import java.io.PrintWriter; import java.net.Socket; import java.net.UnknownHostException;import org.apache.log4j.Logger;/*** 類Client.java的實現(xiàn)描述:*/ public class Client {private static final Logger log = Logger.getLogger("actionLog");private Socket client;private PrintWriter out;public Client(String serverIp, int port) throws UnknownHostException, IOException{client = new Socket(serverIp, port);out = new PrintWriter(client.getOutputStream(), true);}/*** 向server發(fā)送消息* * @param message*/public void send(String message) {out.println(message);}/*** 關(guān)閉當前client*/public void close() {if (client != null) {try {client.close();} catch (IOException e) {log.error(e.getMessage(), e);}}if (out != null) {out.close();}} }?
? ? 最后看我們的測試代碼(基于testng)
? ??package test;
import java.io.IOException; import java.util.Arrays; import java.util.List;import org.testng.Assert; import org.testng.annotations.Test; import socketStudy.Client; import socketStudy.Server;/*** 類TestSocket.java的實現(xiàn)描述:*/ public class TestSocket {private Server server;private static final int port=8733;@SuppressWarnings("static-access")@Testpublic void testSocket() throws IOException,InterruptedException{//這里需要單獨起個線程來在client發(fā)送消息前啟動server的監(jiān)聽程序Thread serverThread=new Thread() {@Overridepublic void run() {try{server = new Server(port);server.listen();}catch(IOException e){throw new RuntimeException(e);} } };serverThread.start();//這里通過線程不斷的睡眠來等待server的監(jiān)聽程序啟動成功while(true){if(server==null||!server.isBound()){Thread.currentThread().sleep(1000);}else{break;}} Client client = new Client("127.0.0.1", port);client.send("test");client.send("joking");client.close();server.close();//獲取當前client發(fā)送的消息List<String> actualList = server.getList();List<String> expectedList = Arrays.asList("test", "joking");Assert.assertEquals(actualList, expectedList);} }轉(zhuǎn)載于:https://www.cnblogs.com/bestchenwu/archive/2012/05/06/9655385.html
總結(jié)
以上是生活随笔為你收集整理的Java Socket入门实例的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: FirstApp,iphone开发学习总
- 下一篇: Microsoft Dynamics C