tcp_server/client

학교 실습/네트워크 2013. 10. 4. 17:02

tcp_server.c


#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#include <unistd.h>

#include <arpa/inet.h>

#include <sys/types.h>

#include <sys/socket.h>


void error_handling(char *message);


int main(int argc, char *argv[])

{

int serv_sock;

int clnt_sock;


struct sockaddr_in serv_addr;

struct sockaddr_in clnt_addr;

socklen_t clnt_addr_size;


char message[]="Hello World!";

if(argc!=2){

printf("Usage : %s <port>\n", argv[0]);

exit(1);

}

serv_sock=socket(PF_INET, SOCK_STREAM, 0);

if(serv_sock == -1)

error_handling("socket() error");

memset(&serv_addr, 0, sizeof(serv_addr));

serv_addr.sin_family=AF_INET;

serv_addr.sin_addr.s_addr=htonl(INADDR_ANY);

serv_addr.sin_port=htons(atoi(argv[1]));

if(bind(serv_sock, (struct sockaddr*) &serv_addr, sizeof(serv_addr))==-1)

error_handling("bind() error"); 

if(listen(serv_sock, 5)==-1)

error_handling("listen() error");

clnt_addr_size=sizeof(clnt_addr);  

clnt_sock=accept(serv_sock, (struct sockaddr*)&clnt_addr,&clnt_addr_size);

if(clnt_sock==-1)

error_handling("accept() error");  

write(clnt_sock, message, sizeof(message));

close(clnt_sock);

close(serv_sock);

return 0;

}


void error_handling(char *message)

{

fputs(message, stderr);

fputc('\n', stderr);

exit(1);

}


/////////////////////////////////////


tcp_client.c


#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#include <unistd.h>

#include <arpa/inet.h>

#include <sys/types.h>

#include <sys/socket.h>


void error_handling(char *message);


int main(int argc, char* argv[])

{

int sock;

struct sockaddr_in serv_addr;

char message[30];

int str_len=0;

int idx=0, read_len=0;

if(argc!=3){

printf("Usage : %s <IP> <port>\n", argv[0]);

exit(1);

}

sock=socket(PF_INET, SOCK_STREAM, 0);

if(sock == -1)

error_handling("socket() error");

memset(&serv_addr, 0, sizeof(serv_addr));

serv_addr.sin_family=AF_INET;

serv_addr.sin_addr.s_addr=inet_addr(argv[1]);

serv_addr.sin_port=htons(atoi(argv[2]));

if(connect(sock, (struct sockaddr*)&serv_addr, sizeof(serv_addr))==-1) 

error_handling("connect() error!");


while(read_len=read(sock, &message[idx++], 1))

{

if(read_len==-1)

{

error_handling("read() error!");

break;

}

str_len+=read_len;

}


printf("Message from server: %s \n", message);

printf("Function read call count: %d \n", str_len);

close(sock);

return 0;

}


void error_handling(char *message)

{

fputs(message, stderr);

fputc('\n', stderr);

exit(1);

}



'학교 실습 > 네트워크' 카테고리의 다른 글

chap6 code  (0) 2013.10.25
chap5 echo_client2.c  (0) 2013.10.18
학교 과제  (0) 2013.09.27

64비트 환경 python에서 단독 실행파일 만들기, 이제 py2exe 말고 cx_freeze합시다

알아두자/python 2013. 9. 29. 15:41

http://cx-freeze.sourceforge.net/


python 쓰시는 분들은 단독 실행파일 만들때 이제 py2exe 말고 cx_freeze 쓰세요


py2exe에선 번들 1이 아니라 3으로 들어가서 파일이 우르르 생성되는데...


요놈은 그렇지 않답니다 >_<

학교 과제

2013. 9. 27. 17:10

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력해주세요.

윈도우8,7 64비트에서 파이썬 설치 제대로 하기

알아두자/Windows 2013. 9. 15. 00:33

1. http://www.lfd.uci.edu/~gohlke/pythonlibs/


64비트용 패키지 파일을 받을 수 있는 페이지, 적극 활용


2. pycharm의 패키지 관리자 사용


파이참 인터프리터 설정으로 가면 패키지 관리자가 있는데, 여기서 pip랑 setuptools을 업그레이드 한 뒤에,


pycharm에서 패키지 검색하고 설치하면 제대로 깔린다.




내가 왜 이걸 몰라서 가상화 하고 별짓을 다 했을까........

20130604

학교 실습/분산처리 2013. 6. 4. 11:49

전체 백업

program_20130604.tar.gz



리더랑 라이터


#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#define MAXLINE 100
// reader부터 실행하쇼
// 이름있는 파이프를 통해 메시지 출력
int main()
{

    printf("RUN FIRST NPREAD!!\nMessage : ");
    int fd,length,count,i;
    char message[MAXLINE];
    fgets(message,sizeof(message),stdin);
    length=strlen(message)+1;//null 문자 때문에
    printf("Set Message Sending count : ");
    scanf("%d",&count);
    // 음수를 입력받으면 기본 카운터 5회로 전송하도록 예외처리
    if(count<0){
            printf("Error, Set Default Sending Count to 5");
            count=4;
    }
    // 그 외에는 걍 보내셈 ㅇㅋ
    else{
        printf("\nOkay, Sending Count : %d",count);
        count-=1;
    }
    printf("\nSending Message : %s",message);
    do{
        fd=open("myPipe",O_WRONLY);
        if(fd==-1)
        {
            sleep(1);
        }
    }
    while(fd==-1);
    for(i=0;i<=count;i++){
                write(fd,message,length);
                sleep(1);
    }
   
    printf("\nSending Finish!\n");
   
    //fclose(fd);
    return 0;   
}


*******************************************************************************


#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#define MAXLINE 100
/* 이름 있는 파이프를 통해 읽은 내용을 프린트한다. */
int main( )
{
   int fd;
   char str[MAXLINE];
   unlink("myPipe");
   mkfifo("myPipe", 0660);
   fd = open("myPipe",O_RDONLY);
   while (readLine(fd, str))
      printf("%s \n", str);
   close(fd);
   return 0;
}

int readLine(int fd, char *str)
{
   int n;
   do {
      n = read(fd, str, 1);
   } while (n > 0 && *str++ != NULL);
   return (n > 0);
}

20130527

학교 실습/HCI 2013. 5. 27. 14:49

/*
 interface i에 stop()을 추가
 class a,b,c에서 이를 구현하고 사용하도록 수정
 * 새로운 interface I2에 추상메서드 turn_on(),turn_off를 정의
 * class B,C가 interface I2도 상속받도록
 * class A에서 interface I2 를 사용하도록 수정
 */
package interfacetest2;

class A {

    void autoPlay(I i) {
        i.play();
    }

    void autoStop(I i) {
        i.stop();
    }
        void turn_on(I2 i) {
        i.turn_on();
    }

    void turn_off(I2 i) {
        i.turn_off();
    }
   
}

interface I {
    public abstract void play();
    public abstract void stop();
}

interface I2 {
    public abstract void turn_on();
    public abstract void turn_off();
}

class B implements I, I2 {

    public void play() {
        System.out.println("play in B class");
    }

    public void stop() {
        System.out.println("play in B stop");
    }

    public void turn_on() {
        System.out.println("play in B turn on");
    }

    public void turn_off() {
        System.out.println("play in B turn off");
    }
}

class C implements I,I2 {

    public void play() {
        System.out.println("play in C class");
    }

    public void stop() {
        System.out.println("play in C stop");
    }

    public void turn_on() {
        System.out.println("play in C turn on");
    }

    public void turn_off() {
        System.out.println("play in C turn off");
    }
}

class InterfaceTest2 {

    public static void main(String[] args) {
        A a = new A();
        a.autoPlay(new B());// 비를 인터페이스로 넘김
        a.autoPlay(new C());// 씨를 인터페이스로 넘김
        a.autoStop(new B());
        a.autoStop(new C());
        a.turn_on(new B());
        a.turn_on(new C());
        a.turn_off(new B());
        a.turn_off(new C());       
    }
}

'학교 실습 > HCI' 카테고리의 다른 글

20130522 HCI 과제 완료  (0) 2013.05.22
20130522 HCI  (0) 2013.05.22
130513  (0) 2013.05.13
20130508  (0) 2013.05.08
20130507  (0) 2013.05.07

손쉽게 저지를수 있는 MFC 실수중 하나

연구실/Coding 2013. 5. 26. 00:04

// CPoint에서 pt라고 줬으니 당근 pt.x, pt.y로 해야 됨

void CMyView::OnLButtonDown(UINT id, CPoint pt)

{

CString strPos;

strPos.Format("%03d %03d",pt.x,pt.y);


HDC hdc;

hdc=::GetDC(m_hWnd);

::TextOut(hdc,0,0,strPos,strPos.GetLength());

::ReleaseDC(m_hWnd,hdc);


CView::OnLButtonDown(id,pt);

}

// CPoint 전역함수 아니고 지역함수잖아, 여기서 point라고 줬으니 아래도 point.x, point.y이런식으로 

void CMyView::OnMouseMove(UINT nFlags, CPoint point)

{

// TODO: 여기에 메시지 처리기 코드를 추가 및/또는 기본값을 호출합니다.


CString strPos2;

strPos2.Format("%03d %03d",point.x,point.y);


CDC*pDC;

pDC=this->GetDC();

pDC->TextOutA(0,0,strPos2);

this->ReleaseDC(pDC);


CView::OnMouseMove(nFlags, point);

}


차이를 기억해두셈


20130522 HCI 과제 완료

학교 실습/HCI 2013. 5. 22. 20:03

/*

 sell 추가

 Buyer 클래스에 sell(Product p) 메서드를 추가하라

 */

package polyargumenttest2;

class Product {

    int price;   // 제품의 가격

    int bonusPoint;  // 제품구매 시 제공하는 보너스점수

    Product(int price) {

        this.price = price;

        bonusPoint = (int) (price / 10.0);

    }

    Product() {

        price = 0;

        bonusPoint = 0;

    }

}

////////////////////////////////////////////////////////상품 추가 부분/////////////////////////////////////////////////////////////////////

// iPad 추가

class iPad extends Product {


    iPad() {

        super(90);

    }


    public String toString() {

        return "iPad";

    }

}

// Tv 추가

class Tv extends Product {


    Tv() {

        super(100);

    }


    public String toString() {

        return "Tv";

    }

}

// Computer 추가

class Computer extends Product {


    Computer() {

        super(200);

    }


    public String toString() {

        return "Computer";

    }

}

// Audio 추가

class Audio extends Product {


    Audio() {

        super(50);

    }


    public String toString() {

        return "Audio";

    }

}

//////////////////////////////////////////////////////////////////////////////////////////////////////////


class Buyer {   // 고객, 물건을 사는 사람


    int money = 1000; // 소유금액

    int bonusPoint = 0; // 보너스점수

    //ArrayList al = new ArrayList();

    Product[] item = new Product[10]; // 구입한 제품을 저장하기 위한 배열

    int i = 0;   // Product배열에 사용될 카운터


    void buy(Product p) {

        if (money < p.price) {

            System.out.println("잔액이 부족하여 물건을 살수 없습니다.");

            return;

        }

        money -= p.price;         // 가진 돈에서 구입한 제품의 가격을 뺀다.

        bonusPoint += p.bonusPoint; // 제품의 보너스 점수를 추가한다.

        item[i++] = p;          // 제품을 Product[] item에 저장한다.

        System.out.println(p + "을/를 구입하셨습니다.");

    }

    // 판매를 진행하되, 물건을 구입한 적이 없으면 판매를 할 수 없음, 그 조건을 반드시 사용하도록 해야됨


    void sell(Product p) {

        int sellcount = 0;

        // 배열 안에서 검색

        System.out.println("[판매] : "+p+" 를 판매합니다. 실제 물품을 가지고 있는지 확인합니다");

        // 배열에서 검색 진행

        for (int i = 0; i < item.length; i++) {

            // 배열에 해당 상품명이 있을 경우

            if (item[i] == p) {

                money += p.price; // 가진 돈에서 구입한 제품의 가격을 더함

                bonusPoint -= p.bonusPoint;   // 제품의 보너스 점수를 뺌

                //System.out.println("해당 상품이 발견된 배열의 위치 : " + i);

                System.out.println("[승인] : 물품 보유를 확인하였습니다.");

                System.out.println("[알림] : "+p + "를 팔았다! 해당 금액은 " + p.price + ", 금액을 환불받아 잔액은 " + money + ", 포인트는 차감되어 다음과 같습니다 : " + bonusPoint);

                sellcount++;

                // 배열 재정렬 진행 (item 배열), i는 상품이 저장된 인덱스를 의미함, 기존 배열 위치에 있던 녀석을 다음 인덱스의 녀석으로 덮어버리고 마지막에 null 처리

                for (int j = i + 1; j <= item.length; j++) {

                    if (item[j] != null) {

                        item[j - 1] = item[j];

                    } else {

                        item[j - 1] = null;

                        break;

                    }

                }

            }

        }

        //위 검색이 끝나고, 판매한 적이 없거나 구매하지 않은 물품일 경우 다음 메시지 출력

        if (sellcount == 0) {

            System.out.println("[오류] : 해당 물품을 구매하지 않았으므로 팔 수 없습니다. 판매룰 중단합니다.");

        }

    }


    void summary() {      // 구매한 물품에 대한 정보를 요약해서 보여 준다.

        int sum = 0;    // 구입한 물품의 가격합계

        String itemList = "";  // 구입한 물품목록 초기화

        // 반복문을 이용해서 구입한 물품의 총 가격과 목록을 만든다.

        // 판매가 아닌 구매의 경우

        for (int i = 0; i < item.length; i++) {

            if (item[i] == null) {

                break;

            }

            sum += item[i].price;

            itemList += item[i] + ", ";

        }

        System.out.println("");

        System.out.println("[상태 확인] - 보유물품 : " + itemList + " 총 물건 가격 : " + sum + ", 잔액 : " + money + " , 보너스 포인트 : " + bonusPoint);

        System.out.println("");

    }

}


class PolyArgumentTest2 {


    public static void main(String args[]) {

        // 바이어 생성

        Buyer b = new Buyer();

        // 제품 생성 부분

        Tv tv = new Tv();

        Computer com = new Computer();

        Audio audio = new Audio();

        iPad ipad = new iPad();

        // 물건 구매 진행

        b.buy(tv);

        b.buy(com);

        b.buy(audio);

        // 내역 확인 및 잔액 포인트 누계

        b.summary();

        // 판매부분

        b.sell(tv);

        b.sell(ipad);

        // 내역 확인 및 잔액 포인트 누계

        b.summary();

    }

}

'학교 실습 > HCI' 카테고리의 다른 글

20130527  (0) 2013.05.27
20130522 HCI  (0) 2013.05.22
130513  (0) 2013.05.13
20130508  (0) 2013.05.08
20130507  (0) 2013.05.07

20130522 HCI

학교 실습/HCI 2013. 5. 22. 14:02

/*
 자손타입의 참조변수fr로 조상타입의 인스턴스 뉴카를 참조하려고 했기 때문에 에러가 남
 */
package castingtest2;

/**
 *
 * @author User
 */
class CastingTest2 {

    public static void main(String args[]) {
        Car car = new FireEngine();
        //Car car = new Car();에서 위와 같이 바뀜, 맨처음 만들때 워터 들어가도록 파이어엔진을 만들면 됨, car객체 아닌 파이어 객체 만들어
        //fr=(FireEngine)car는 변환 시 문제 발생하지 않음
        Car car2 = null;
        FireEngine fe = null;

        car.drive();
        if (car instanceof FireEngine) {
            fe = (FireEngine) car;  // 8번째 줄. 실행 시 에러가 발생한다.
            fe.drive();
            car2 = fe;
            car2.drive();
        }
    }
}

class Car {

    String color;
    int door;

    void drive() {   // 운전하는 기능
        System.out.println("drive, Brrrr~");
    }

    void stop() {  // 멈추는 기능 
        System.out.println("stop!!!");
    }
}

class FireEngine extends Car { // 소방차

    void water() {  // 물을 뿌리는 기능
        System.out.println("water!!!");
    }
}
//////////////////////////////////////////////////////////////////////////////////////////////////////

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package captiontvtest;

/**
 *
 * @author User
 */
class Tv {
 boolean power;  // 전원상태(on/off)
 int channel; // 채널

 void power() {  power = !power; }
 void channelUp() {  ++channel; }
 void channelDown() { --channel; }
}

class CaptionTv extends Tv {// tv를 상속받음
 boolean caption; // 캡션상태(on/off)
 void displayCaption(String text) {
  if (caption) { // 캡션 상태가 on(true)일 때만 text를 보여 준다.
   System.out.println(text);
  }
 }
}

class CaptionTvTest {
 public static void main(String args[]) {
  CaptionTv ctv = new CaptionTv();
  ctv.channel = 10;    // 캡션에선 없지만 tv조상 클래스로부터 상속받은 멤버
  ctv.channelUp();        // 조상 클래스로부터 상속받은 멤버
  System.out.println(ctv.channel);
  ctv.displayCaption("Hello, World"); 
  ctv.caption = true;         // 캡션기능을 켠다.
  ctv.displayCaption("Hello, World"); // 캡션을 화면에 보여 준다.
                Tv t = new CaptionTv();
                 t.channel = 10;
  t.channelUp();
  System.out.println(t.channel);
  //t.displayCaption("Hello, World");         //can not find symbol
  //t.caption = true;
  //t.displayCaption("Hello, World");
                //CaptionTv ctv1 = new Tv();
               
 }
}

////////////////////////////////////////////////////////////////////////////////////////////

/*
 자손타입의 참조변수fr로 조상타입의 인스턴스 뉴카를 참조하려고 했기 때문에 에러가 남
 */
package castingtest2;

/**
 *
 * @author User
 */
class CastingTest2 {

    public static void main(String args[]) {
        Car car = new FireEngine(); // 아빠 참조변수로 자녀를 참조, 파이어엔진 만들었찌만 카 객체가 있고, 화이트하고 4가 나오게 됨
        System.out.println("Color : "+car.color+".Door : " + car.door);
        //Car car = new Car();에서 위와 같이 바뀜, 맨처음 만들때 워터 들어가도록 파이어엔진을 만들면 됨, car객체 아닌 파이어 객체 만들어
        //fr=(FireEngine)car는 변환 시 문제 발생하지 않음
        car.water();
        Car car2 = null;
        FireEngine fe = null;

        car.drive();
        if (car instanceof FireEngine) {
            fe = (FireEngine) car;  // 8번째 줄. 실행 시 에러가 발생한다.
            // 자녀의 참조변수를 참고하였기 때문에
            System.out.println("Color : "+fe.color+".Door : " + fe.door);
            // 오버라이딩 된 녀석이 튀어나옴
            fe.water();
            //fe.drive();
            //car2 = fe;
            //car2.drive();
        }
    }
}

class Car {

    String color="White";
    int door=4;

    void drive() {   // 운전하는 기능
        System.out.println("drive, Brrrr~");
    }

    void stop() {  // 멈추는 기능 
        System.out.println("stop!!!");
    }
    void water()
    {
        System.out.println("Car Water!!!");
    }
}

class FireEngine extends Car { // 소방차

    String color="Red";
    int door=8;
   
    void water() {  // 물을 뿌리는 기능
        System.out.println("Car Water!!!");
    }
}

'학교 실습 > HCI' 카테고리의 다른 글

20130527  (0) 2013.05.27
20130522 HCI 과제 완료  (0) 2013.05.22
130513  (0) 2013.05.13
20130508  (0) 2013.05.08
20130507  (0) 2013.05.07

WINAPI 프로그래밍시 초기화가 'case' 레이블에 의해 생략되었습니다 오류 관련

알아두자/Windows 2013. 5. 19. 18:11

간단하다, CASE문을 {}로 묶어서 처리하면 에러가 안난다...


case WM_LBUTTONDOWN :

MessageBox(hWnd,"2윈도우의 제목을 바꿉니다.","알림",MB_OK);

SetWindowText(_hWnd2,"Change the world");

break;

case WM_RBUTTONDOWN :

{

MessageBox(hWnd,"우측 클릭해쪄, 메모장에 텍스트 쓴당","알림",MB_OK);

// HWND : 이벤트 발생 윈도우 확인 위한 식별자, 여기선 메모장을 위해서 새로 정의함

HWND hNote;

char textbox[80];

char string1[] = "야! 내가 메모장 안으로 침투한다";

// SPY++를 이용해 매번 바뀌는 메모장의 핸들값을 입력해 준다.

hNote=(HWND)0x000D0604;

HDC hdc;

hdc=GetDC(hNote);

sprintf(textbox,"%s",string1);

TextOut(hdc,0,0,string1,strlen(string1));

ReleaseDC(hNote,hdc);

break;

}


위는 예시 ~_~/