<div>이게 서버 소스..</div> <div>#include <stdio.h><br>#include <sys/types.h><br>#include <sys/socket.h><br>#include <unistd.h><br>#include <stdlib.h><br>#include <errno.h><br>#include <arpa/inet.h><br>#include <netinet/in.h><br>#include <string.h><br>#include <signal.h><br>#define Maxlen 1024<br>#define ERR_EXIT(m) \<br> do { \<br> perror(m); \<br> exit(EXIT_FAILURE); \<br> } while (0)</div> <div>void do_service(int);</div> <div>int main(void)<br>{<br> long maxlen;<br> signal(SIGCHLD, SIG_IGN);//좀비 프로세스 이용<br> int listenfd; //used for listening<br> if ((listenfd = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0)<br> // listenfd = socket(AF_INET, SOCK_STREAM, 0)<br> ERR_EXIT("socket error");</div> <div> struct sockaddr_in servaddr;<br> memset(&servaddr, 0, sizeof(servaddr));<br> servaddr.sin_family = AF_INET;//Internet Address cluster<br> servaddr.sin_port = htons(4567);//Port Number<br> //servaddr.sin_addr.s_addr = htonl(INADDR_ANY);//IP address<br> servaddr.sin_addr.s_addr = inet_addr("127.0.0.1"); <br> /* inet_aton("127.0.0.1", &servaddr.sin_addr); */</div> <div> int on = 1;<br> if (setsockopt(listenfd, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on)) < 0)<br> ERR_EXIT("setsockopt error");</div> <div> if (bind(listenfd, (struct sockaddr *)&servaddr, sizeof(servaddr)) < 0)<br> ERR_EXIT("bind error");</div> <div> if (listen(listenfd, SOMAXCONN) < 0) <br> ERR_EXIT("listen error");</div> <div> struct sockaddr_in peeraddr; //construct the struct for sockaddr_in<br> socklen_t peerlen = sizeof(peeraddr); //needs to be initialized<br> int conn; // connected sockfd</div> <div> pid_t pid;</div> <div> while (1)<br> {<br> if ((conn = accept(listenfd, (struct sockaddr *)&peeraddr, &peerlen)) < 0)<br> ERR_EXIT("accept error");<br> printf("recv connect ip=%s port=%d\n", inet_ntoa(peeraddr.sin_addr),<br> ntohs(peeraddr.sin_port));</div> <div> pid = fork();<br> if (pid == -1)<br> ERR_EXIT("fork error");<br> if (pid == 0)<br> {<br> // 자식 프로세스<br> close(listenfd);<br> do_service(conn);<br> exit(EXIT_SUCCESS);<br> }<br> else<br> close(conn); //부모 프로세스<br> }</div> <div> return 0;<br>}</div> <div>void do_service(int conn)<br>{<br> char recvbuf[1024];<br> long maxlen;<br> while (1)<br> {<br> memset(recvbuf, 0, sizeof(recvbuf));<br> int ret = read(conn, recvbuf, sizeof(recvbuf));<br> if (ret == 0) //클라이언트 종료<br> {<br> printf("client close\n");<br> break;<br> }<br> else if (ret == -1)<br> ERR_EXIT("read error");<br> fputs(recvbuf, stdout);<br> //printf("msg received from client:%s\n",recvbuf );<br> write(conn, "msg received\n", 1024);<br> }<br>}</div> <div>=======================</div> <div>#include <stdio.h><br>#include <sys/types.h><br>#include <sys/socket.h><br>#include <unistd.h><br>#include <stdlib.h><br>#include <errno.h><br>#include <arpa/inet.h><br>#include <netinet/in.h><br>#include <string.h></div> <div><br>#define ERR_EXIT(m) \<br> do { \<br> perror(m); \<br> exit(EXIT_FAILURE); \<br> } while (0)</div> <div> </div> <div><br>int main(int argc,char* argv[])<br>{<br> int sock,rec_len;<br> struct sockaddr_in servaddr;<br> char sendbuf[1024] = {0};<br> char recvbuf[1024] = {0};<br> char ipaddress[20];<br> /*if(argc!=2)<br> {<br> printf("parameter wrong:which should be like this --ppclient 127.0.0.1 4567\n");<br> exit(0);<br> }*/</div> <div><br> if(argc!=4)<br> {<br> printf("parameter wrong:which should be like this --ppclient 127.0.0.1 4567\n");<br> exit(0);<br> }<br> if ((sock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0)<br> // listenfd = socket(AF_INET, SOCK_STREAM, 0)<br> ERR_EXIT("socket error");</div> <div> </div> <div> memset(&servaddr, 0, sizeof(servaddr));<br> servaddr.sin_family = AF_INET;<br> //servaddr.sin_port = htons(4567);</div> <div> servaddr.sin_port=htons(atoi(argv[3]));</div> <div> //servaddr.sin_addr.s_addr = inet_addr("127.0.0.1");<br> /* inet_aton("127.0.0.1", &servaddr.sin_addr); */</div> <div><br> memset(ipaddress,0,sizeof(ipaddress));<br> //sprintf(ipaddress,"%s",argv[1]);<br> sprintf(ipaddress,"%s",argv[2]);<br> if(inet_aton(ipaddress,&servaddr.sin_addr)==0)<br> {<br> printf("inet_aton error for :%s\n",ipaddress);<br> exit(0);<br> }</div> <div> if (connect(sock, (struct sockaddr *)&servaddr, sizeof(servaddr)) < 0)<br> ERR_EXIT("connect error");</div> <div> printf("send msg to server:\n");</div> <div> <br> while (fgets(sendbuf, sizeof(sendbuf), stdin) != NULL)<br> {</div> <div> write(sock, sendbuf, strlen(sendbuf));<br> read(sock, recvbuf, sizeof(recvbuf));</div> <div> //printf("Received msg:%s\n",recvbuf);<br> fputs(recvbuf, stdout);</div> <div> memset(sendbuf, 0, sizeof(sendbuf));<br> memset(recvbuf, 0, sizeof(recvbuf));<br> }</div> <div><br> close(sock);</div> <div><br> return 0;<br>}</div> <div>이게 클라이언트 소스인데요</div> <div>클라이언트를 리눅스에서 컴파일해서 실행하면</div> <div>parameter wrong:which should be like this --ppclient 127.0.0.1 4567</div> <div>이렇게 뜨는데 포트가 열려있지않다는 말인가요??</div> <div>해결방법좀 알려주세요 ㅠㅠ </div>
댓글 분란 또는 분쟁 때문에 전체 댓글이 블라인드 처리되었습니다.