客户端:
public class Client {
public static void main(String[] args) {
try {
// 1.连接到本机,端口号为8080
Socket connectToServer = new Socket("localhost", 8080);
// 2.创建输入流对象,将数据输入流连接到socket
DataInputStream inFromServer = new DataInputStream(
connectToServer.getInputStream());
// 3.创建输出流对象,将数据输出流连接到socket
DataOutputStream outToServer = new DataOutputStream(
connectToServer.getOutputStream());
System.out.println("输入半径数值发送到服务器,输入bye结束");
String outStr, inStr;
boolean goon = true;
// 4.等待用户输入, 将输入保存到buf这个对象中
BufferedReader buf = new BufferedReader(
new InputStreamReader(System.in));
// 5.反复读用户的数据病计算
while (goon) {
(1) outStr = buf . readLine () ;//5.1读入用户的输入
// 5.2写到socket中
outToServer.writeUTF(outStr);
// 5.3清空缓冲区,立即发送
outToServer.flush();
(4) inStr = inFromServer . readUTF () ;// 5.4从Socket中读数据
if (!inStr.equals("bye"))
System.out.println("从服务器返回的结果是:" + inStr);
else
goon = false;
}
inFromServer.close();
outToServer.close();
connectToServer.close();
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
服务器端:
package it.java.network.programming;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
public class Server {
public static void main(String[] args) {
try {
System.out.println("等待客户端的连接");
// 1.调用ServerSocket类,以8000端口号为参数来创建一个ServerSocket对象——serverSocket
// 注意:端口号要选取1024-65536之间的端口(1-1023端口已被系统占用)
ServerSocket serverSocket = new ServerSocket(8080)
/*
* 2.调用accept()方法,一直处于阻塞状态,直到接收到来自Client的连接请求,此时accept()方法将
* 返回一个新建的Socket类的对象(本例使用的新建对象是connectToClient)
* connecToClient的作用:和客户机建立的通信链路在服务程序内的通信端点。
*/
Socket connectToClient = serverSocket.accept();
// 3.获取来自客户端的IP地址
System.out.println("连接请求来自"+
connectToClient.getInetAddress().getHostAddress());
// 4.创建输入流对象,将数据输入流连接到socket
DataInputStream inFromClient = new DataInputStream(
connectToClient.getInputStream());
// 5.创建输出流对象,将数据输出流连接到socket
DataOutputStream outToClient = new DataOutputStream(
connectToClient.getOutputStream());
// 6.使用流对象(inFromClient,outToClient)的方法完成和客户端的数据传输
String str;
double radius, area;
boolean goon = true;
while (goon) {
// 6.1从socket中的输入流对象(inFromClient)读取数据
(2)str = inFromClient.readUTF();
// 6.2如果字符流不等于bye
if (!str.equals("bye")) {
radius = Double.parseDouble(str);
System.out.println("接收到的半径值为:" + radius);
area = radius * radius * Math.PI;
str = Double.toString(area);
// 6.2.1向socket中写数据
(3)outToClient.writeUTF(str);
// 6.2.2清空缓冲区立即发送
outToClient.flush();
System.out.println("圆面积" + str + "已经发送");
} else {
goon = false;
outToClient.writeUTF("bye");
outToClient.flush();
}
// 7.服务器端程序关闭和客户端通信的流和通信的Socket
inFromClient.close();
outToClient.close();
serverSocket.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}