#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <winsock2.h>
#define BUF_SIZE 4048
void ErrorHandling(char *message);
int my_send(int sockfd, char *out, int debug);
int my_read(int sockfd, char *recvline, int debug);
int main() {
WSADATA wsaData;
SOCKET hsocket;
char msg[BUF_SIZE+1], out[BUF_SIZE+1];
int n;
char *cmd, *pos;
int strLen;
SOCKADDR_IN servAdr;
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(&servAdr, 0, sizeof(servAdr));
servAdr.sin_family=AF_INET;
servAdr.sin_addr.s_addr=inet_addr("121.254.175.233");
servAdr.sin_port=htons(atoi("6667"));
if(connect(hsocket, (SOCKADDR*)&servAdr, sizeof(servAdr))==SOCKET_ERROR)
ErrorHandling("CONNECT ERROR");
else
puts("Connected");
my_send(hsocket, "NICK clark\r\n",1);
my_send(hsocket, "USER clark 8 * : Clark Clarkerson\r\n", 1);
while(1)
{
msg[0]=0;
n =my_read(hsocket, msg, 1);
if (n > 0) {
msg[n] = 0;
if (strstr(msg, "PING") != NULL) {
out[0] = 0;
pos = strstr(msg, " ")+1;
sprintf(out, "PONG %s\r\n", pos);
my_send(hsocket, out, 1);
}
}
printf("FROM SERVER : %s", msg);
}
closesocket(hsocket);
WSACleanup();
return 0;
}
int my_read(int sockfd, char *recvline, int debug) {
int n;
n = recv(sockfd, recvline, BUF_SIZE, debug);
if (n > 0 && debug) {
printf("IN: %s", recvline);
}
return n;
}
int my_send(int sockfd, char *out, int debug) {
if (debug) {
printf("OUT: %s", out);
}
return send(sockfd, out, strlen(out), 0);
}
void ErrorHandling(char *message)
{
fputs(message, stderr);
fputs("\n", stderr);
exit(1);
}
맨처음 USER, NICK부분은 잘만 보내는데 PING/PONG구문이 안감...
wirte.writeline 쓰고싶ㄷ ㅏ..
IRC프로토콜은 어지간하면 가져다 쓰는게 좋다는.... 표준이 초기화 부분이 불명확한 부분이 있어서 가끔 접속때 특별한 처리를 해줘야하는 서버가 있음...
땡칠도사// USER, NICK 보내고 PING오면 PONG만 보내주면되는데 while문에서 막힘.. 데이터오면 파싱해서 PING이란 글자가있으면 PONG으로 보내주면되는데.. strstr말고 쓸만한 함수 추천좀해주세여
니가 직접만들어 뭐하러 함수들 찾냐 필요하면 만들면되지