--------------------------------Server---------------------------------------
// 여기부터 서버입니다.
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<winsock2.h>
#define PORT 55000
int main() {
/* 클라이언트의 접속을 기다리는 서버 소켓 생성 */
WSADATA wsdata;
if(WSAStartup(MAKEWORD(2,2),&wsdata) != 0 ){
printf("윈도우 소켓을 초기화 하는데 실패 했습니다.");
return 0;
}
printf("윈도우 소켓을 초기화했습니다.");
SOCKET serverSocket = socket(AF_INET, SOCK_STREAM,0);
if(serverSocket == INVALID_SOCKET) {
/* 서버 소켓 생성에 실패하면 에러 메시지를 출력하고 함수 종료 */
printf("서버 소켓을 생성하는데 실패 했습니다\n");
return 0;
}
printf("서버 소켓을 생성 했습니다. \n");
/* 서버의 주소를 저장하는 구조체 serverAddress 생성 */
sockaddr_in serverAddress;
/* serverAddress 구조체를 0으로 초기화 */
ZeroMemory(&serverAddress,sizeof(serverAddress));
/* serverAddress에 현재 IP 대입
INADDR_ANY->자동으로 IP를 리턴하는 상수 */
serverAddress.sin_addr.s_addr=htonl(INADDR_ANY);
/* 주소 타입 */
serverAddress.sin_family=AF_INET;
/* 클라이언트와 메시지를 주고받을 포트 번호 */
serverAddress.sin_port=htons(PORT);
/*서버 소켓에 주소정보 설정 */
bind(serverSocket,(sockaddr *)&serverAddress, sizeof(serverAddress));
/* 클라이언트의 접속을 기다리는 대기모드로 전환 */
listen(serverSocket,5);
printf("클라이언트의 접속을 기다립니다. ......\n");
/* 클라이언트의 접속을 허락하고 클라이언트와 데이터를 주고받는 클라이런트 소켓 생성 */
SOCKET clientSocket=accept (serverSocket,NULL,NULL);
printf("클라이언트가 접속 했습니다. \n");
printf("야구 게임 시작 ...\n");
/* 서버쪽 숫자를 저장할 배열 선언 */
int serverNumber[3];
/* 난수 생성하기 위한 초기화 */
srand((unsigned)time(NULL));
do{
/* 난수를 생성하고 난수를 10으로 나눈 나머지를 대입 */
serverNumber[0]=rand();
serverNumber[1]=rand();
serverNumber[2]=rand();
}
/* 배열에 같은 수가 없을때 까지 반복함 */
while(( serverNumber[0]==serverNumber[1]) | (serverNumber[1]==serverNumber[2])|
(serverNumber[2]==serverNumber[0]));
printf("서버 숫자 --->%d %d %d\n", serverNumber[0],serverNumber[1],serverNumber[2]);
/*****************여기서 부터 달라지 부분 **********************************/
int fromClientNumber[3]; // 클라이너트가 입력한 세개의 숫자를 대입할 배열
// 스트라이크와 볼의 개수를 저장해서 클라이언트로 전송할 배열 
int toClientScore[2];
while(1) { // 무한히 반복하다가 스크라이크가 3이 되면 반복 종료
/* 클라이언트가 입력한 세 개의 숫자를 읽어 들여서 fromClientNumber에 대입함 */
recv(clientSocket,(char*)fromClientNumber,sizeof(fromClientNumber),0);
/* 네트워크 바이트 정렬된 숫자를 호스트 바이트로 재정렬 */
for (int index=0;index<3;index++)
fromClientNumber[index]=ntohl(fromClientNumber[index]);
/* 클라이언트가 입력하 수를 출력 */
printf("클라이언트가 입력한 수 -->%d %d %d\n",
fromClientNumber[0],fromClientNumber[1],fromClientNumber[2]);
int strike=0; // 스트라이크의 수를 대입할 변수
int ball=0; // 볼의 수를 대입할 변수 
for(int i=0;i<3;i++){
/* 서버의 숫자가 자장된 serverNumber 에서 i 번째 숫자를 꺼내서 
oneServerNumber에 대입 */
int oneServerNumber=serverNumber[i];
for(int j=0;j<3;j++){
/* 클라이언트에서 전송한 숫자가 저장된 fromClientNumber의 j번째 수자를 꺼내서 
oneClientNumber에 대입 */
int oneClientNumber=fromClientNumber[j];
/* 서버의 숫자와 클라이언트의 수자가 같으면 */
if(oneServerNumber==oneClientNumber) {
/* 서버 숫자의 위치와 클라이언트 숫자의 위치가 같으면 */
if(i==j)
strike++;
else
ball++;
}
} // end for(j)
} // end for(i)
printf("%d 스트라이크 %d 볼 \n\n",strike,ball);
/* 스트라이크와 볼의 개수를 클라이언트로 전송하기 위해서 네트워크 바이트로 정렬하고 
toClientScore 배열에 대입 */
toClientScore[0]=htonl(strike);
toClientScore[1]=htonl(ball);
/* 클라이언트로 스트라이크 개수와 볼의 개수 전송 */
send(clientSocket,(char*)toClientScore,sizeof(toClientScore),0);
/* 세개의 수자의 위치와 수를 모두 맞춰서 스트라이크가 3이면 종료 */
if(strike == 3){
printf("3 스트라이크 프로그램을 종료합니다 \n");
break;
}
} //end while
closesocket(clientSocket); //클라이언트 소켓 종료
WSACleanup();
return 1;
}
------------------------------Client-------------------------------------
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<winsock2.h>
#define PORT 55000
int main() {
WSADATA wsdata;
if (WSAStartup(MAKEWORD(2,2),&wsdata) !=0) {
printf("윈도우 소켓을 초기화 하는데 실패했습니다.\n");
return 0;
}
printf("윈도우 소켓을 초기화 했습니다.\n");
SOCKET clientSocket = socket(AF_INET, SOCK_STREAM,0);
if(clientSocket == INVALID_SOCKET){
printf("클라이언트 소켓을 생성하는데 실패 했습니다. \n");
return 0;
}
printf("클라이언트 소켓을 생성했습니다.\n");
sockaddr_in serverAddress;
ZeroMemory(&serverAddress, sizeof(serverAddress));
serverAddress.sin_addr.s_addr = inet_addr("127.0.0.1");
serverAddress.sin_family = AF_INET;
serverAddress.sin_port = htons(PORT);
connect(clientSocket, (sockaddr *)&serverAddress, sizeof(serverAddress));
printf("야구 게임을 시작합니다.\n");
while(1) {
int clientNumber[3];
printf("세 수를 입력해 주세요 ex: 1 2 3\n-->");
scanf("%d %d %d",&clientNumber[0],&clientNumber[1],&clientNumber[2]);
for(int i=0;i<3;i++)
clientNumber[i]=htonl(clientNumber[i]);
send(clientSocket,(char*)clientNumber,sizeof(clientNumber),0);
int score[2];
recv(clientSocket,(char *)score,sizeof(score),0);
int strike=ntohl(score[0]);
int ball=ntohl(score[1]);
printf(":%d 스트라이크 %d볼\n\n",strike,ball);
if(strike==3){
printf("3 스트라이크 프로그램을 종료합니다.\n\n");
break;
}
}
closesocket(clientSocket);
WSACleanup();
return 1;
}


이건데 리눅스 기반으로 바꾸려면 뭐 수정해야합니까?