

=========================================================================
package jongkyu.tcp.model;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.util.Scanner;
public class TcpClient {
Scanner sc = new Scanner(System.in);
public void main() {
try {
System.out.print("서버 IP입력 : ");
// String serverIP = sc.next();
String serverIp = "localhost";
System.out.println("서버에 연결중입니다....." + serverIp);
// 소켓생성
Socket so = new Socket(serverIp, 7777);
System.out.println("클라이언트 소켓을 생성 했습니다.");
// 서버에서 메세지 받아야 한다.
InputStream in = so.getInputStream();
DataInputStream dis = new DataInputStream(in);
//
OutputStream out = so.getOutputStream();// 만들어진 소켓의 아웃풋스트림넣겠다.
DataOutputStream dos = new DataOutputStream(out);
System.out.println(dis.readUTF());
//System.out.println("종규받은것 " + dis.readUTF());
while (true) {
System.out.println(dis.readUTF());
//System.out.print("내가 입력한거 : ");
System.out.print("-->");
String text = sc.nextLine();
dos.writeUTF(text);//어떤건지 보내는것
System.out.println(dis.readUTF());
String sel =dis.readUTF();//스트라이크 볼 받는것
if(sel.equals("win")) {
System.out.println("클라이언트가 졌다.");
break;
}
if(sel.equals("lose")) {
System.out.println("클라이언트가 이겼다.");
break;
}
}
System.out.println("연결종료합니다.");
dis.close();
dos.close();
so.close();
} catch (Exception e) {
}
}
}
=================================================================
package jongkyu.tcp.model;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Random;
import java.util.Scanner;
import java.util.StringTokenizer;
public class TcpServer {
Scanner sc = new Scanner(System.in);
Random r = new Random();
public void main() {
ServerSocket ss = null;
try {
ss = new ServerSocket(7777);// 서버소켓 오픈정도가 끝
System.out.println("서버 소켓을 생성 하였습니다.");
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
System.out.println("클라이언트의 접속을 기다립니다 . . . . . .");
try {
Socket so = ss.accept();// 얘가 실제로 연결을 기다리는 중이다.
System.out.println(getTime() + so.getInetAddress() + "로부터 접속성공");// 요청들어온 IP 갖고온다.
String numb=null;
int [] ran=new int [3];
//numb=(r.nextInt(10)+1)+" "+(r.nextInt(10)+1)+" "+(r.nextInt(10)+1);
//StringTokenizer sr = new StringTokenizer(numb," ");
for(int i=0; i<ran.length; i++) {//i부터 시작해서 ran의 길이까지 i의값을 증가시켰다.
ran[i]=r.nextInt(10)+1;//ran배열의 i번째에 랜덤 수를 넣었다.
for(int j=0; j<i; j++) {//여기서부터는 중복검사 소스이다.
if(ran[i]==ran[j]) {//중복검사소스이다.
i--;//같을경우 다시 i를 입력하게끔 할려고 돌아갔다.
break;//위에 for문으로 가야되니 다시 돌아갔다.
}
}
}
numb=ran[0]+" "+ran[1]+" "+ran[2];//이걸 해준 이유는 그냥 표시하기 위해서이다. 아래에다 그냥 변수안만들고 해도 상관은 없다.
System.out.println("서버 숫자 ->"+numb);
InputStream in = so.getInputStream();
DataInputStream dis = new DataInputStream(in);
OutputStream out = so.getOutputStream();// 만들어진 소켓의 아웃풋스트림넣겠다.
DataOutputStream dos = new DataOutputStream(out);
dos.writeUTF("야구 게임을 시작합니다.");//처음에 보낼 말이다.
int oout=0;//이걸 준 이유는 총 10번 왔다갔다할경우 서버가 이기게끔 하기 위해서이다.
while (true) {//반복시킨 이유는 반복할려고
int strike=0;
int ball=0;
dos.writeUTF("세 수를 입력해주세요(ex: 1 2 3)");
String a = dis.readUTF();
System.out.println("클라이언트가 입력한 수 -> " + a);
StringTokenizer st = new StringTokenizer(a," ");
int [] nnum=new int [3];
for(int i=0; i<3;i++) {
nnum[i]=Integer.parseInt(st.nextToken());//입력받은것
}
for(int i=0; i<3; i++) {
for(int j=0; j<3; j++) {
if(ran[i]==nnum[j]) {
if(i==j) {
strike++;
}
else {
ball++;
}
}
}
}
String str=strike+" 스트라이크 "+ball+" 볼 ("+oout+" )번째";
System.out.println(str);
dos.writeUTF(str);
oout++;
if(oout>=10) {
dos.writeUTF("win");
System.out.println("서버승리");
break;
}
else if(strike==3) {
System.out.println("서버패배");
dos.writeUTF("lose");
break;
}
else {
dos.writeUTF("");
}
}
dos.close();
dis.close();
so.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} //
}
// }
static String getTime() {// 메소드 끝나고 안사라진다. static일경우에
SimpleDateFormat f = new SimpleDateFormat("[hh:mm:ss]");
return f.format(new Date());
}
}
=================================================================
package jongkyu.tcp.run;
import jongkyu.tcp.model.TcpClient;
public class ClRun {
public static void main(String[] args) {
TcpClient tc = new TcpClient();
tc.main();
}
}
==============================================================
package jongkyu.tcp.run;
import jongkyu.tcp.model.TcpServer;
public class SeRun {
public static void main(String[] args) {
TcpServer ts = new TcpServer();
ts.main();
}
}
==============================================================
파일은 여기에!!!
ClRun.exe
SeRun.exe