LINUX下的socket网络编程

本文介绍了如何在Linux下使用C语言通过TCP协议编写服务器和客户端程序。服务器通过多线程处理客户端请求,客户端发送正整数,服务器返回该数的因子个数。代码中使用for循环处理可能的错误,并提供了运行示例。
摘要由CSDN通过智能技术生成

 最近学习了关于LINUX环境下的网络编程,具体的函数就不一一详细介绍了,直接开始题目:

        注意:本人只是习惯使用for循环,因为觉得简洁方便。

        这里将使用C语言用TCP协议实现:服务器使用多线程为客户端提供服务,客户端发送任意一个正整数,服务器端返回此数因子的个数。

        先从客户端开始,先引入相关头文件,宏定义一个端口号:

#include <stdio.h>
#include <stdlib.h>
#include <netdb.h>
#include <sys/socket.h>
#include <string.h>

#define PORT 1234    //端口号

        然后是主函数,声明网络编程所需要用到的相关变量:

int main(int argc,char *argv[])
{
    int sock;   //使用的套接字
    struct sockaddr_in sock_addr;   //socket使用的结构体变量
    struct hostent *host;   //主机地址解析获取到的ip存储结构体

        接着是ip地址的解析,作为客户端只需要创建socket以及connect进行连接,为了操作方便和出错的情况采用for循环去执行对应函数。注意:因为程序执行时,出错默认是重来的,只有输入‘N’才会取消。具体看代码:

if(argc < 2)
    {
        printf("请在执行时带上连接的ip地址\n");
        exit(0);
    }

    // 地址解析,传入主机域名
    printf("地址为:%s\n",argv[1]);
    if((host = gethostbyname(argv[1])) == NULL)
    {
        printf("地址解析错误\n");
        exit(0);
    }
    // 设置sock_addr结构体成员
    sock_addr.sin_family = AF_INET;
    sock_addr.sin_port = htons(PORT);
    sock_addr.sin_addr = *((struct in_addr *)host->h_addr); //赋值地址
    // printf("sock_addr.sin_addr=%d\n",sock_addr.sin_addr);
    bzero(&(sock_addr.sin_zero),8); //将该内存地址前八位清零
    // 创建socket
    for(;(sock = socket(AF_INET,SOCK_STREAM,0)) == -1;)
    {
        printf("创建socket错误\n");
        printf("是否重新创建?Y/N\n");
        char c = 0;
        scanf("%c",&c);
        if(c == 'N')
        {
            printf("已放弃创建\n");
       
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值