게시판 즐겨찾기
편집
드래그 앤 드롭으로
즐겨찾기 아이콘 위치 수정이 가능합니다.
UDP 에코 서버-클라이언트 실습중인데 클라이언트 주소가 자꾸 날라갑니다
게시물ID : programmer_21720짧은주소 복사하기
작성자 : 핫게익
추천 : 0
조회수 : 577회
댓글수 : 6개
등록시간 : 2017/11/20 02:55:57
옵션
  • 본인삭제금지
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#include "headerFiles.h"
 
int main(void)
{
        int s;
        int len;
        char buffer[256];
        struct sockaddr_in servAddr;
        struct sockaddr_in clntAddr;
        int clntAddrLen;
 
        memset(&servAddr, 0sizeof(servAddr));
        servAddr.sin_family = AF_INET;
        servAddr.sin_port =  htons(12345);
        servAddr.sin_addr.s_addr = htonl(INADDR_ANY);
        printf("domain complet!\n");
 
        if((s = socket(PF_INET, SOCK_DGRAM, 0)) < 0)
        {
                perror("Error: socket failed!");
                exit(1);
        }
        if((bind(s, (struct sockaddr*)&servAddr, sizeof(servAddr))) < 0)
        {
                perror("Error: bind failed!");
                exit(1);
        }
 
        printf("bind complete!\n");
 
        for(int i = 0;; i++)
        {
                len = recvfrom(s, buffer, sizeof(buffer), 0,
                                (struct sockaddr*)&clntAddr, &clntAddrLen);
                if (len == 1)
                        break;
                printf("%d th - %s\t%d", i + 1, inet_ntoa(clntAddr.sin_addr),
                                                ntohs(clntAddr.sin_port));
                sendto(s, buffer, len, 0, (struct sockaddr*)&clntAddr, sizeof(clntAddr));
                printf(" - send\n");
        }
 
        printf("Server close!\n");
        close(s);
        return 0;
}
 
cs




1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#include "headerFiles.h"
#define IP "127.0.0.1"
 
int main(int argc, char* argv[])
{
        int s;
        int len;
        int servName;
        short servPort;
        char *string;
        char buffer[256 + 1];
        struct sockaddr_in servAddr;
 
        servName = inet_addr(IP);
        servPort = htons(12345);
        string = argv[1];
 
        memset(&servAddr, 0sizeof(servAddr));
        servAddr.sin_family = AF_INET;
        servAddr.sin_addr.s_addr = servName;
        servAddr.sin_port = servPort;
 
        if((s = socket(PF_INET, SOCK_DGRAM, 0)) < 0)
        {
                perror("Error: Socket failed!");
                exit(1);
        }
 
        printf("New socket!\n");
 
        if ((len = sendto(s, string, strlen(string), 0,
                (struct sockaddr*)&servAddr, sizeof(servAddr))) < 0)
        {
                perror("Error: Sending failed!");
                exit(1);
        }
 
        printf("Sending!\n");
 
        if (len == 1)
        {
                printf("Close!\n");
                close(s);
                exit(0);
        }
 
        if (recvfrom(s, buffer, len, 0NULLNULL< 0)
        {
                perror("Error: Receive failed!");
                exit(1);
        }
 
        printf("Receiving!\n");
 
        buffer[len] = '\0';
        printf("Echo string received: ");
        fputs(buffer, stdout);
        printf("\n");
 
        close(s);
        return 0;
}
 
cs

전체 추천리스트 보기
새로운 댓글이 없습니다.
새로운 댓글 확인하기
글쓰기
◀뒤로가기
PC버전
맨위로▲
공지 운영 자료창고 청소년보호