1. 程式人生 > >java socket 同時讀和寫

java socket 同時讀和寫

package cn.com.socket;


import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.Reader;
import java.io.Writer;
import java.net.ServerSocket;
import java.net.Socket;
/**
 * 服務端同時讀和寫
 * @author Administrator
 *
 */
public class ServerDemo1 {


public static void main(String[] args) throws IOException {
//為了簡單起見,所有的異常資訊都往外拋  
     int port = 8899;  
     //定義一個ServerSocket監聽在埠8899上  
     ServerSocket server = new ServerSocket(port);  
     //server嘗試接收其他Socket的連線請求,server的accept方法是阻塞式的  
     Socket socket = server.accept();  
     //跟客戶端建立好連線之後,我們就可以獲取socket的InputStream,並從中讀取客戶端發過來的資訊了。  
     Reader reader = new InputStreamReader(socket.getInputStream());  
     char chars[] = new char[64];  
     int len;  
     StringBuilder sb = new StringBuilder();  
     String temp;  
     int index;  
     while ((len=reader.read(chars)) != -1) {  
        temp = new String(chars, 0, len);  
        if ((index = temp.indexOf("eof")) != -1) {//遇到eof時就結束接收  
           sb.append(temp.substring(0, index));  
           break;  
        }  
        sb.append(temp);  
     }  
     System.out.println("我是伺服器,客戶端說: " + sb);  
     //讀完後寫一句  
     Writer writer = new OutputStreamWriter(socket.getOutputStream());  
     writer.write("Hello Client.");  
     writer.flush();  
     writer.close();  
     reader.close();  
     socket.close();  
     server.close();  
  }  

}

package cn.com.socket;


import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.Reader;
import java.io.Writer;
import java.net.Socket;
import java.net.UnknownHostException;
/**
 * 客戶端同時讀和寫
 * @author Administrator
 *
 */
public class ClientDemo1 {


public static void main(String[] args) throws UnknownHostException, IOException {
  //為了簡單起見,所有的異常都直接往外拋  
    String host = "localHost";  //要連線的服務端IP地址  
    int port = 8899;   //要連線的服務端對應的監聽埠  
    //與服務端建立連線  
    Socket client = new Socket(host, port);  
     //建立連線後就可以往服務端寫資料了  
    Writer writer = new OutputStreamWriter(client.getOutputStream());  
     writer.write("Hello Server.");  
     writer.write("eof");  
     writer.flush();  
     //寫完以後進行讀操作  
    Reader reader = new InputStreamReader(client.getInputStream());  
     char chars[] = new char[64];  
     int len;  
     StringBuffer sb = new StringBuffer();  
     String temp;  
     int index;  
     while ((len=reader.read(chars)) != -1) {  
        temp = new String(chars, 0, len);  
        if ((index = temp.indexOf("eof")) != -1) {  
           sb.append(temp.substring(0, index));  
           break;  
        }  
        sb.append(new String(chars, 0, len));  
     }  
     System.out.println("我是客戶端,伺服器說: " + sb);  
     writer.close();  
     reader.close();  
     client.close();  
  }  


}