客户端产生2个随机数,分别发送给服务器端,进行加 减法的操作,然后返回结果,
加法服务端ip:127.0.0.1 port:8111
减法服务端ip:127.0.0.1 port:8112
代码如下:
//Client.java
package com.xie.netcourse;
import java.awt.Button;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.HeadlessException;
import java.awt.Label;
import java.awt.Panel;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.ConnectException;
import java.net.Socket;
import java.net.UnknownHostException;
/**
* 客户端包括窗口显示,随机数生成,数据传送
* @author centre
*
*/
@SuppressWarnings("serial")
public class Client extends Frame {
TextField tfRoundNum1,tfRoundNum2,tfResult1,tfResult2;
Button btn,btnAdd,btnPlus;
Label lable1,label2,label3,label4;
static DataOutputStream dos=null;
static DataInputStream dis=null;
public Client() throws HeadlessException {
//setSize(320, 160);
setTitle("客户端");
setBounds(400, 400, 200, 160);
setResizable(false);
addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
setLayout(new FlowLayout());
Panel p1=new Panel(null);
p1.setBounds(0, 0, 200, 80);
btn=new Button("重新生成");
btn.addActionListener(new ProduceRound());
lable1=new Label("随机数1:");
tfRoundNum1=new TextField("0");
tfRoundNum2=new TextField("0");
label2=new Label("随机数2:");
tfRoundNum1.setBounds(120, 0, 80, 20);
tfRoundNum2.setBounds(120, 40, 80, 20);
btn.setBounds(0, 20, 60, 20);
lable1.setBounds(60, 0, 60, 20);
label2.setBounds(60, 40, 60, 20);
p1.add(btn);
p1.add(lable1);
p1.add(tfRoundNum1);
p1.add(label2);
p1.add(tfRoundNum2);
Panel p2=new Panel(null);
p2.setBounds(100, 80, 200, 80);
btnAdd=new Button("+");
btnAdd.addActionListener(new AddServer());
label3=new Label("两数之和为:");
label3.setBounds(20, 0, 80, 20);
tfResult1=new TextField("null");
tfResult1.setBounds(100, 0, 100, 20);
btnAdd.setBounds(0, 0, 20, 20);
btnPlus=new Button("-");
btnPlus.addActionListener(new PlusServer());
label4=new Label("两数之和差:");
tfResult2=new TextField("null");
tfResult2.setBounds(100, 20, 100, 20);
label4.setBounds(20, 20, 80, 20);
btnPlus.setBounds(0, 20, 20, 20);
p2.add(label3);
p2.add(btnAdd);
p2.add(tfResult1);
p2.add(btnPlus);
p2.add(label4);
p2.add(tfResult2);
add(p1);
add(p2);
setVisible(true);
}
public int roundNum(){
//产生0——100之内
return (int) (Math.random()*100);
}
public static void main(String[] args) {
new Client();
}
/**
* 根据传入的ip 和 port 连接服务端
* @param ip
* @param port
*/
private void connect(String ip,int port){
try {
Socket s=new Socket(ip, port);
dos=new DataOutputStream(s.getOutputStream());
dis=new DataInputStream(s.getInputStream());
} catch (ConnectException e) {
System.out.println("连接异常。");
// e.printStackTrace();
} catch (UnknownHostException e) {
System.out.println("没有找到服务端。");
//e.printStackTrace();
} catch (NullPointerException e) {
System.out.println("空指针异常。");
}
catch (IOException e) {
System.out.println("输入输出异常。");
//e.printStackTrace();
}
}
/**
* 监听器用于监听生成随机数按钮,产生2个随机数。
* @author centre
*
*/
class ProduceRound implements ActionListener{
@Override
public void actionPerformed(ActionEvent e) {
tfRoundNum1.setText(roundNum()+"");
tfRoundNum2.setText(roundNum()+"");
tfResult1.setText("null");
tfResult2.setText("null");
}
}
/**
* 用于向加法服务端发送数据同时接收结果
* @author centre
*
*/
class AddServer implements ActionListener{
String ip="127.0.0.1";
int port=8111;
@Override
public void actionPerformed(ActionEvent e) {
connect(ip, port);
String num1=tfRoundNum1.getText().trim();
String num2=tfRoundNum2.getText().trim();
try {
dos.writeUTF(num1);
dos.writeUTF(num2);
} catch (IOException e1) {
e1.printStackTrace();
}
try {
String result=dis.readUTF();
if (result.equals("0")) {
result="输入异常。";
}
tfResult1.setText(result);
} catch (IOException e1) {
e1.printStackTrace();
}
}
}
/**
* 用于向减法服务端发送数据,同时接收结果
* @author centre
*
*/
class PlusServer implements ActionListener{
String ip="127.0.0.1";
int port=8112;
@Override
public void actionPerformed(ActionEvent e) {
connect(ip, port);
String num1=tfRoundNum1.getText().trim();
String num2=tfRoundNum2.getText().trim();
try {
dos.writeUTF(num1);
dos.writeUTF(num2);
} catch (IOException e1) {
e1.printStackTrace();
}
try {
String result=dis.readUTF();
if (result.equals("0")) {
result="输入异常。";
}
tfResult2.setText(result);
} catch (IOException e1) {
e1.printStackTrace();
}
}
}
}
//ServerAdd.java
package com.xie.netcourse;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
/**
* 加法服务端,接收2个数据并进行计算,然后返回结果
* @author centre
*
*/
public class ServerAdd {
public static void main(String[] args) {
try {
ServerSocket ss=new ServerSocket(8111);
while(true){
Socket s=ss.accept();
DataInputStream dis=new DataInputStream(s.getInputStream());
DataOutputStream dos=new DataOutputStream(s.getOutputStream());
String num1=dis.readUTF();
String num2=dis.readUTF();
int result=ServerAdd.add(num1, num2);
dos.writeUTF(result+"");
}
} catch (IOException e) {
e.printStackTrace();
}
}
/**
*将2个数相加,同时返回结果
* @author centre
* @param num1
* @param num2
* @return 若正常运行,则返回2数相加之和,否则返回0
*/
private static int add(String num1,String num2){
if (num1!=null&&num2!=null) {
int m1=Integer.parseInt(num1);
int m2=Integer.parseInt(num2);
return m1+m2;
}
else {
return 0;
}
}
}
//ServerPlus.java
package com.xie.netcourse;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
/**
* 减法服务端,接收2个数据,并进行减法运算,然后返回结果。
* @author centre
*/
public class ServerPlus {
public static void main(String[] args) {
try {
ServerSocket ss=new ServerSocket(8112);
while(true){
Socket s=ss.accept();
DataInputStream dis=new DataInputStream(s.getInputStream());
DataOutputStream dos=new DataOutputStream(s.getOutputStream());
String num1=dis.readUTF();
String num2=dis.readUTF();
int result=ServerPlus.plus(num1, num2);
dos.writeUTF(result+"");
}
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 返回2数相减的结果。
* @param num1
* @param num2
* @return
*/
private static int plus(String num1,String num2){
if (num1!=null&&num2!=null) {
int m1=Integer.parseInt(num1);
int m2=Integer.parseInt(num2);
return m1-m2;
}
else {
return 0;
}
}
}