이 프로그램은 클라이언트에서 띄운 GUI에 원하는 연산을 입력하면 서버에서 그 연산을 계산해 결과를 클라이언트에 다시 보내주는 방식으로 동작한다.
//서버
package chap6;
import java.io.*;
import java.net.*;
import java.util.LinkedList;
public class CulculationServer {
public static void main(String args[]) {
DatagramPacket sendPacket;
DatagramPacket receivePacket;
DatagramSocket socket;
double result=0;
char ch, op=0;
String preNum,lastNum;
int spre;
double lpre;
byte[] data= new byte[200];
try{
socket = new DatagramSocket(4000);
DatagramPacket receivepacket = new DatagramPacket(data, data.length);
socket.receive(receivepacket);
String what = new String(data);
for(int i =0; i<3; i++){
//한글자씩 잘라내기
ch = what.charAt(i);
//만약 연산자가 나오면 연산자를 기준으로 자르기
if(ch=='/'|| ch=='*'||ch=='-'||ch=='+') {
int idx = what.indexOf(ch);
op = ch;
//숫자 저장 후 string -> int로 변경
preNum = what.substring(0,idx);
spre = Integer.parseInt(preNum);
lastNum = what.substring(idx+1,what.length());
lpre = Double.parseDouble(lastNum);
//계산
if(op == '/') {
result =spre / lpre;
} else if(op == '*') {
result = spre * lpre;
}else if(op == '+') {
result = spre + lpre;
}else if(op == '-') {
result = spre - lpre;
}
//계산값 소켓을 통해 보내주기
data = String.valueOf(result).getBytes();
sendPacket = new DatagramPacket(data,data.length,InetAddress.getLocalHost(),5000);
socket.send(sendPacket);
}
}
}catch(SocketException se) {
System.out.println(se);
}catch(IOException e) {
System.out.println(e);
}catch(NumberFormatException e1){
}
}
}
//클라이언트
package chap6;
import java.io.*;
import java.net.*;
import java.awt.*;
import java.awt.event.*;
public class CulculationClient extends Frame implements ActionListener{
private TextField enter;
private TextArea display;
private DatagramPacket sendPacket, receivePacket;
private DatagramSocket socket;
public CulculationClient(){
super("계산기");
enter = new TextField("식을 입력하세요");
enter.addActionListener(this);
add(enter,BorderLayout.NORTH);
display = new TextArea();
add(display, BorderLayout.CENTER);
addWindowListener(new WinListener());
setSize(400,200);
setVisible(true);
try{
socket = new DatagramSocket(5000);
}catch(SocketException se){
se.printStackTrace();
System.exit(1);
}
}
public void actionPerformed(ActionEvent e) {
try {
String s = e.getActionCommand();
byte data[] = s.getBytes();
sendPacket = new DatagramPacket(data, data.length,InetAddress.getLocalHost(),4000);
socket.send(sendPacket);
byte data1[] = new byte[200];
receivePacket = new DatagramPacket(data1, data1.length);
socket.receive(receivePacket);
display.append(new String(receivePacket.getData()));
display.append("\n");
}catch(IOException exception) {
display.append(exception.toString() + "\n");
exception.printStackTrace();
}
}
public static void main(String args[]){
CulculationClient s = new CulculationClient();
}
class WinListener extends WindowAdapter{
public void windowClosing(WindowEvent we) {
System.exit(0);
}
}
}
//결과

'JAVA' 카테고리의 다른 글
자바채팅프로그래밍 -TCP & 스레드 이용한 사전 (0) | 2019.11.10 |
---|---|
자바채팅프로그래밍 -다중채팅 (0) | 2019.11.10 |
자바채팅프로그래밍 -UDP소켓이용 채팅프로그래밍 (0) | 2019.11.03 |
자바채팅프로그래밍 - UDP소켓이용하여 날짜 출력 (0) | 2019.11.03 |
자바채팅 프로그래밍 - 호스트 파일 정보 출력 , 객체구분 (0) | 2019.10.11 |