⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 socket.c

📁 linux下的BBS
💻 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 + -