本节我们看一下怎样才能编写一个基于TCP稳定的客户端或者服务器程序,主要以试验抓包的方式观察数据包的变化,对网络中出现的多种情况进行分析,分析网络程序中常用的技术及它们出现的原因,在之后的编程中能早一点意识到这些潜在问题。实例代码如下: client.c 和server.c  因在试验过程中代码有所改动,本实例代码仅仅是参考。

#include <sys/socket.h>
#include <sys/types.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <fcntl.h>
#include <netinet/in.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <strings.h>
#include <errno.h>
#define PORT 6666
#define MAXSIZE 1024
void str_cli(FILE *, int);
int main(int argc, char *argv[])
{
    if (argc != 2)
    {
        fprintf(stderr, "./client IP\n");
        return 1;
    }
    int fd = socket(AF_INET, SOCK_STREAM, 0);
    struct sockaddr_in serveraddr;
    serveraddr.sin_family = AF_INET;
    serveraddr.sin_port = htons(PORT);
    inet_pton(AF_INET, argv[1], &serveraddr.sin_addr);
    connect(fd, (struct sockaddr *)&serveraddr, sizeof(serveraddr));
    //FILE * fp = fopen("./aa","r");
    //str_cli(fp, fd);
    sleep(60);
    close(fd);
    exit(0);
}

void str_cli(FILE * fp, int fd)
{
    char sendbuff[MAXSIZE], recvbuff[MAXSIZE];
    bzero(sendbuff, MAXSIZE);
    bzero(recvbuff,MAXSIZE);
    while (fgets(sendbuff, MAXSIZE, fp) != NULL)
    {
        write(fd, sendbuff, strlen(sendbuff));
        printf("hello\n");
        /*  if(read(fd, recvbuff, MAXSIZE) == 0)
        {   
            if(errno == ECONNRESET)
            {
                fprintf(stderr, "reconnect\n");     
            }
            fprintf(stderr, "server terminated!\n");
            exit(1);
        }*/
        fputs(recvbuff, stdout);
        bzero(sendbuff, MAXSIZE);
        bzero(recvbuff,MAXSIZE);
    }
}
View Code

相关文章:

  • 2023-03-07
  • 2021-04-18
  • 2021-07-09
  • 2021-12-28
  • 2021-10-21
  • 2022-12-23
  • 2021-09-02
猜你喜欢
  • 2021-11-21
  • 2021-09-02
  • 2022-12-23
  • 2022-01-04
  • 2022-12-23
  • 2022-12-23
  • 2022-01-11
相关资源
相似解决方案