Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- g++ 업데이트
- python popen
- influxdb 설치
- telegraf
- gcc regex
- 1697
- c3 second
- c++ 정규식
- c3 step graph
- InfluxDB
- regex_search
- 정규식 컴파일
- c3 초
- snmp test
- grafana dashboard
- snmp
- linux시간으로 변경
- 정규식 문자열 출력
- semanage
- CentOS7
- subporcess path
- centos pyhon 설치
- python os
- gcc 업데이트
- 백준
- 정규식 활용
- c3 축 가리기
- c3 축 없애기
- selinux port 등록
- python subprocess
Archives
- Today
- Total
리셋 되지 말자
윈도우 기반 서버, 클라이언트 예제 작성(동작함) 본문
server.c
#include<stdio.h>
#include<stdlib.h>
#include<WinSock2.h>
#pragma comment (lib, "ws2_32.lib")
void ErrorHandling(char* message);
int main(int argc, char* argv[]) {
WSADATA wsaData;
SOCKET hServSock, hClntSock;
SOCKADDR_IN servAddr, clntAddr;
int szClntAddr;
char message[] = "Hello World!";
if (argc != 2) {
printf("Usage : %s <port>\n", argv[0]);
exit(1);
}
if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0)
ErrorHandling("WSAStartup() error!");
hServSock = socket(PF_INET, SOCK_STREAM, 0);
if (hServSock == INVALID_SOCKET)
ErrorHandling("socket() error");
memset(&servAddr, 0, sizeof(servAddr));
servAddr.sin_family = AF_INET;
servAddr.sin_addr.S_un.S_addr = htonl(INADDR_ANY);
servAddr.sin_port = htons(atoi(argv[1]));
if (bind(hServSock, (SOCKADDR*)&servAddr, sizeof(servAddr)) == SOCKET_ERROR)
ErrorHandling("bind() error");
if (listen(hServSock, 5) == SOCKET_ERROR)
ErrorHandling("listen() error!");
szClntAddr = sizeof(clntAddr);
hClntSock = accept(hServSock, (SOCKADDR*)&clntAddr, &szClntAddr);
if (hClntSock == INVALID_SOCKET)
ErrorHandling("accept() error");
send(hClntSock, message, sizeof(message), 0);
closesocket(hClntSock);
closesocket(hServSock);
WSACleanup();
return 0;
}
void ErrorHandling(char* message) {
fputs(message, stderr);
fputc('\n', stderr);
exit(1);
}
client.c
#include<stdio.h>
#include<stdlib.h>
#include<WinSock2.h>
#pragma comment (lib, "ws2_32.lib")
void ErrorHandling(char* message);
int main(int argc, char* argv[]) {
WSADATA wsaData;
SOCKET hSocket;
SOCKADDR_IN servAddr;
char message[30];
int strLen;
if (argc != 3) {
printf("Usage : %s <IP> <port>\n", argv[0]);
exit(1);
}
if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0)
ErrorHandling("WSAStartup() error!");
hSocket = socket(PF_INET, SOCK_STREAM, 0);
if (hSocket == INVALID_SOCKET)
ErrorHandling("socket() error");
memset(&servAddr, 0, sizeof(servAddr));
servAddr.sin_family = AF_INET;
servAddr.sin_addr.S_un.S_addr = inet_addr(argv[1]);
servAddr.sin_port = htons(atoi(argv[2]));
if (connect(hSocket, (SOCKADDR*)&servAddr, sizeof(servAddr)) == SOCKET_ERROR)
ErrorHandling("connect() error!");
strLen = recv(hSocket, message, sizeof(message) - 1, 0);
if (strLen == -1)
ErrorHandling("read() error!");
printf("Message from server: %s \n", message);
closesocket(hSocket);
WSACleanup();
return 0;
}
void ErrorHandling(char* message) {
fputs(message, stderr);
fputc('\n', stderr);
exit(1);
}
실행 결과
server쪽 cmd 실행화면
client쪽 cmd 실행화면
'socket' 카테고리의 다른 글
window socket 프로그래밍 (0) | 2020.04.06 |
---|---|
socket api 파일들... (0) | 2020.04.06 |
윈도우의 파일핸들, 소켓핸들과 리눅스의 파일 디스크립터 (0) | 2020.04.03 |
[window] 윈도우 기반 소켓관련 함수 및 예제 (0) | 2020.04.03 |
[windows] WORD, LPWSADATA (0) | 2020.04.03 |
Comments