Linux - 网络服务器开发②

Linux - 客户端开发(Ubuntu)
客户端开发
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>

#define SERVER_PORT 666
#define SERVER_IP "127.0.0.1"

int main(int argc, char *argv[])
{
    // 获取参数(欲向服务端发送的内容)
    int sockfd;	// 信箱
    char *message;
    struct sockaddr_in servaddr;	// 标签,信封
    int n;
    char buf[64];

    if(argc != 2)   // 程序参数错误
    {
        fputs("usage: ./echo_client message\n", stderr);
        exit(1);
    }

    message = argv[1];
    //printf("message: %s\n", message);

    // 创建邮箱
    sockfd = socket(AF_INET, SOCK_STREAM, 0);

    // 清空标签,写入地址和端口号
    memset(&servaddr, '\0', sizeof(struct sockaddr_in));

    servaddr.sin_family = AF_INET;
    inet_pton(AF_INET, SERVER_IP, &servaddr.sin_addr);	// 欲发送的IP地址, 这里连接的是本地服务端,所以用127.0.0.1

    servaddr.sin_port = htons(SERVER_PORT);	// 发送至端口号

    // 连接服务端
    connect(sockfd, (struct sockaddr *)&servaddr, sizeof(servaddr));

    // 发送内容
    write(sockfd, message, strlen(message));

    // 读取服务端内容
    n = read(sockfd, buf, sizeof(buf)-1);

    if(n > 0)
    {
        buf[n] = '\0';
        printf("receivs: %s\n", buf);
    }
    else
    {
        perror("error!\n");
    }
    close(sockfd);

    return 0;
}



补充
  1. 如果自己写代码是时候报错了,可以在vim的命令模式里面用:set nu来显示文本行数。
  2. 服务端开启后,客户端连接输入输出正常,服务端没反应的话
    1. 可能是因为服务端可能有遗留后台线程在运行,可以用ps -ef | grep a.out(a.out为文件名)来查看是否后台有遗留线程,再使用killall a.out(a.out为程序名)来结束这些遗留进程
    2. 还有一种方法,将服务端程序重新编译
测试连接

打开该程序需要带参数文本,例如./a.out "This a message text!"
使用方式:启动服务端,等待连接 -> 启动客户端程序,带参数

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值