📄 socket.c
字号:
#include "socket.h"intget_connect (char *serv_name, unsigned short port_num){ struct hostent *hp; struct sockaddr_in sa; int sockfd;#ifdef DEBUG printf ("FUNC get_connect: getting IP address of server %s\n", serv_name);#endif if ((hp = gethostbyname (serv_name)) == NULL) {#ifdef DEBUG printf ("FUNC get_connect: Server does not exist: %s\n", serv_name);#endif return SOCK_NOEXIST; }#ifdef DEBUG printf ("FUNC get_connect: initializing the socket address of server.\n");#endif memset (&sa, 0, sizeof (sa)); memcpy ((char *) &(sa.sin_addr), hp->h_addr, hp->h_length); sa.sin_family = AF_INET; sa.sin_port = htons (port_num); if ((sockfd = socket (AF_INET, SOCK_STREAM, 0)) < 0) {#ifdef DEBUG perror (" FUNC: get_connect: socket cannot be opened\n");#endif return SOCK_ERROR; } if (connect (sockfd, (struct sockaddr *) &sa, sizeof (sa)) < 0) {#ifdef DEBUG printf ("FUNC: get_connect: can't connect to server: %s\n", serv_name);#endif close (sockfd); return SOCK_NORESPOND; }#ifdef DEBUG printf ("FUNC get_connect: Successfully connected to server %s\n", serv_name); printf ("FUNC get_connect: Socket number is %d\n", sockfd);#endif return sockfd;}intwritesock (int sockfd, char *buff, int bufflen){#ifdef DEBUG printf ("FUNC writesock: the buffer is %s\n", buff); printf ("FUNC writesock: the bufferlen is %d\n", bufflen); printf ("FUNC writesock: the sockfd is %d\n", sockfd);#endif if ((send (sockfd, buff, bufflen, 0)) < 0) {#ifdef DEBUG printf ("FUNC writesock: ERROR in writing line to socket.\n");#endif return SOCK_ERROR; } return 0;}intreadsock (int sockfd, char *buff, int bufflen){ int count, len_of_line = 1; if (recv (sockfd, buff, bufflen, MSG_PEEK) < 1) {#ifdef DEBUG printf ("FUNC readsock: Error in reading line from socket.\n");#endif return SOCK_ERROR; } for (count = 0; (buff[count] != '\n') && (count < (bufflen - 2)); count++, len_of_line++); recv (sockfd, buff, len_of_line, 0); buff[len_of_line] = '\0'; return 0;}intwriteln (int sockfd, char *buf){ if ((writesock (sockfd, buf, strlen (buf))) == 0) return 0; else return SOCK_ERROR;}intsockprintf (int socket, char *format, ...){ va_list ap; char buf[8192]; va_start (ap, format); vsprintf (buf, format, ap); va_end (ap); return writesock (socket, buf, strlen (buf));}intsockgetline (int socket, char *buf, int len){ while (--len) { if (read (socket, buf, 1) != 1) return -1; if (*buf == '\n') break; if (*buf != '\r') buf++; } *buf = 0; return 0;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -