写一段封指定ip的程序

本文介绍了一个用C语言编写的程序,它通过命令行接收输入,连接到指定IP并发送数据,直到用户输入quit退出。主要涉及套接字编程和网络通信。
摘要由CSDN通过智能技术生成
// 写一段封指定ip的程序
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <errno.h>
#include <fcntl.h>
#include <netdb.h>
#include <sys/time.h>

int main(int argc, char *argv[])
{
    int sockfd;
    int n;
    struct sockaddr_in addr;
    struct sockaddr_in servaddr;
    char buf[1024];
    int i;
    char *ip;
    int optval;
    char *port;
    int flag;
    int fd;
    int ret;
    int count;
    int len;
    int j;
    int k;

    if (argc != 3)
    {
        printf("Usage: %s ip port\n", argv[0]);
        return -1;
    }
    ip = argv[1];
    port = argv[2];
    sockfd = socket(AF_INET, SOCK_STREAM, 0);
    if (sockfd < 0)
    {
        perror("socket");
        return -1;
    }
    optval = 1;
    bzero(&addr, sizeof(addr));
    addr.sin_family = AF_INET;
    addr.sin_port = htons(atoi(port));
    addr.sin_addr.s_addr = inet_addr(ip);
    setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &optval, sizeof(optval));
    if (connect(sockfd, (struct sockaddr *)&addr, sizeof(addr)) < 0)
    {
        perror("connect");
        return -1;
    }
    printf("connect success\n");
    flag = 1;
    while (flag)
        while (1)
        {
            printf("please input:");
            fgets(buf, 1024, stdin);
            buf[strlen(buf) - 1] = '\0';
            if (strcmp(buf, "quit") == 0)
            {
                flag = 0;
                break;
            }
            len = strlen(buf);
            for (i = 0; i < len; i++)
            {
                if (buf[i] == ' ')
                {
                    buf[i] = '\0';
                    for (j = i; j < len; j++)
                    {
                        buf[j] = buf[j + 1];
                    }
                    len--;
                    i--;
                }
            }
            count = 0;
            for (i = 0; i < len; i++)
            {
                if (buf[i] == '\0')
                {
                    count++;
                }
            }
            if (count == 0)
            {
                printf("please input again\n");
                continue;
            }
            for (i = 0; i < count; i++)
            {
                if (i == 0)
                {
                    if (send(sockfd, buf, strlen(buf), 0) < 0)
                    {
                        perror("send");
                        return -1;
                    }
                }
                else
                {
                    if (send(sockfd, " ", 1, 0) < 0)
                    {

                        perror("send");
                        return -1;
                    }
                    if (send(sockfd, buf, strlen(buf), 0) < 0)
                    {
                        perror("send");
                        return -1;
                    }
                }
            }
            printf("send success\n");
        }
    close(sockfd);
    return 0;
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值