客户端

使用BufferedReader从Socket上读取数据

  • 建立对服务器的Socket连接

    Socket chatSocket=new Socket("127.0.0.1",5000);

  • 建立连接到Socket上底层输入串六的InputStreamReader

    InputStreamReader stream=new InputStreamReader(chatSocket.getInputStream());

  • 建立BufferedReader来读取

1
2
BufferedReader reader=new BufferedReader(stream);
String message=reader.readLine();

用PrintWriter写数据到Socket

  • 对服务器建立Socket连接

    Socket chatSocket=new Socket("127.0.0.1",5000);

  • 建立链接到Socket的PrintWriter

    PrintWriter=new PrintWriter(chatSocket.getOutputStream());

  • 写入数据

1
2
writer.printIn("message to send");
writer.print("another message");

示例代码

DailyAdviceClient客户端程序

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
import java.io.*;
import java.net.*;
public class DailyAdviceClient {
public void go(){

try {
Socket s = new Socket("127.0.0.1",4242);

InputStreamReader streamReader = new InputStreamReader(s.getInputStream());
BufferedReader reader = new BufferedReader(streamReader);

String advice = reader.readLine();
System.out.println("Today you should: " + advice);

reader.close();
} catch(IOException ex){
ex.printStackTrace();
}
}

public static void main(String[] arg){
DailyAdviceClient client = new DailyAdviceClient();
client.go();
}
}

服务端

工作方式

  • 服务器应用程序对特定端口创建出ServerSocket

    ServerSocket serverSock=new ServerSocket(4242);

  • 客户端对服务器应用程序建立Socket连接

    Socket sock=new Socket("190.165.1.103",4242);

  • 服务器创建出与客户端通信的新Socket

    Socket sock=serverSock.accept();

示例代码

DailyAdviceServer程序代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
import java.io.*;
import java.net.*;
public class DailyAdviceServer {
String[] adviceList = {
"Take smaller bites",
"Go for the tight jeans,No they do NOT make you look fat.",
"One word: inappropriate",
"Just for today, be honest. Tell your boss what you *really* think",
"YOu might want to rethink that haircut"
};

public void go(){
try{
//ServerSocket会家庭客户端对这台机器在4242端口上的请求

ServerSocket serverSock = new ServerSocket(4242);

//服务器进入无穷循环等待服务客户端的请求
while(true){
Socket sock = serverSock.accept(); //这个方法会停下来等待要求到达后才会继续

PrintWriter writer = new PrintWriter(sock.getOutputStream());
String advice = getAdvice();
writer.println(advice);
writer.close();
System.out.println(advice);
}
}catch(IOException ex){
ex.printStackTrace();
}
}

private String getAdvice(){
int random = (int) (Math.random() * adviceList.length);
return adviceList[random];
}

public static void main(String[] args){
DailyAdviceServer server = new DailyAdviceServer();
server.go();
}


}