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;
/**
* 服務(wù)端同時(shí)讀和寫(xiě)
* @author Administrator
*
*/
public class ServerDemo1 {
public static void main(String[] args) throws IOException {
//為了簡(jiǎn)單起見(jiàn),所有的異常信息都往外拋
int port = 8899;
//定義一個(gè)ServerSocket監(jiān)聽(tīng)在端口8899上
ServerSocket server = new ServerSocket(port);
//server嘗試接收其他Socket的連接請(qǐng)求,server的accept方法是阻塞式的
Socket socket = server.accept();
//跟客戶端建立好連接之后,我們就可以獲取socket的InputStream,并從中讀取客戶端發(fā)過(guò)來(lái)的信息了。
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時(shí)就結(jié)束接收
sb.append(temp.substring(0, index));
break;
}
sb.append(temp);
}
System.out.println("我是服務(wù)器,客戶端說(shuō): " + sb);
//讀完后寫(xiě)一句
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;
/**
* 客戶端同時(shí)讀和寫(xiě)
* @author Administrator
*
*/
public class ClientDemo1 {
public static void main(String[] args) throws UnknownHostException, IOException {
//為了簡(jiǎn)單起見(jiàn),所有的異常都直接往外拋
String host = "localHost"; //要連接的服務(wù)端IP地址
int port = 8899; //要連接的服務(wù)端對(duì)應(yīng)的監(jiān)聽(tīng)端口
//與服務(wù)端建立連接
Socket client = new Socket(host, port);
//建立連接后就可以往服務(wù)端寫(xiě)數(shù)據(jù)了
Writer writer = new OutputStreamWriter(client.getOutputStream());
writer.write("Hello Server.");
writer.write("eof");
writer.flush();
//寫(xiě)完以后進(jìn)行讀操作
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("我是客戶端,服務(wù)器說(shuō): " + sb);
writer.close();
reader.close();
client.close();
}
}
|