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

📄 client.c

📁 linux 环境下的socket编程客户端
💻 C
字号:
#include <stdio.h>#include <stdlib.h>#include <sys/socket.h>#include <netinet/in.h>#include <errno.h>#include <fcntl.h>#include <string.h>#include <time.h>#define TCP_BUFFER_SIZE   0X10000#define PACKET_SIZE       4096#define STRLEN            0x100int main(){  int sockfd;  char buffer[PACKET_SIZE];  struct sockaddr_in svr_addr, client_addr;  struct hostent *host;  int port, nbytes;  int seq = 0;  unsigned int i, iret;  unsigned short datalen, offsetd;  unsigned char  offsets, bytes;  unsigned char tmpbuf[STRLEN];  int buffer_size, opt;  if((sockfd = socket(AF_INET, SOCK_STREAM,0)) == -1)  {    fprintf(stderr, "socket error :%s\a\n", strerror(errno));    exit(1);  }  bzero(&client_addr, sizeof(client_addr));  client_addr.sin_family=AF_INET;  client_addr.sin_port=htons(0);  client_addr.sin_addr.s_addr=htonl(INADDR_ANY);  if (bind(sockfd, (struct sockaddr*)(&client_addr), sizeof(struct sockaddr)) == -1)  {    fprintf(stderr, "Bind address error\n");    exit(1);  }  bzero(&svr_addr, sizeof(svr_addr));  svr_addr.sin_family=AF_INET;  svr_addr.sin_port=htons(5986);  svr_addr.sin_addr.s_addr= inet_addr("192.168.12.79");  if(connect(sockfd, (struct sockaddr*)(&svr_addr), sizeof(struct sockaddr)) == -1)  {   fprintf(stderr, "connect error:%s\n", strerror(errno));   exit(1);  }    fprintf(stderr, "connect success\n");  opt = 1;  buffer_size = TCP_BUFFER_SIZE;  if ((setsockopt(sockfd, SOL_SOCKET, SO_SNDBUF, &buffer_size, sizeof(opt)) != 0)      ||(setsockopt(sockfd, SOL_SOCKET, SO_RCVBUF, &buffer_size, sizeof(opt)) != 0))  {    fprintf(stderr, "setsockopt error:%s\n", strerror(errno));    exit(1);  }  for(i=0;i<=STRLEN;i++)  {  tmpbuf[i] = i;}  datalen = 100;  offsetd = 0;  offsets = 0;    while (1)  {    if (datalen >= STRLEN) {  datalen = 100;}    if (datalen+offsetd+3 >= PACKET_SIZE)    {      iret = send(sockfd, buffer, offsetd, 0);      fprintf(stderr, "send datalen = %d\n", iret);      offsetd = 0;    }        buffer[offsetd] = (datalen+3) & 0xff;    buffer[offsetd+1] = ((datalen+3)>>8) & 0xff;    buffer[offsetd+2] = 0x04;    offsetd += 3;    bytes = STRLEN - offsets;    if (bytes >= datalen)    {      memcpy(buffer+offsetd, tmpbuf+offsets, datalen);    }    else    {      memcpy(buffer+offsetd, tmpbuf+offsets, bytes);      memcpy(buffer+offsetd+bytes, tmpbuf, datalen-bytes);    }    offsetd += datalen;    offsets += datalen;    datalen++;    //usleep(100);  }//while    close(sockfd);  return 0;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -