unix环境IPC编程套接字(一,TCP通信实例

本文介绍了一个简单的TCP服务器和客户端的实现过程。服务器监听指定端口并接收来自客户端的消息,而客户端则连接到服务器并发送消息。示例代码展示了如何创建套接字、绑定地址、监听端口、接受连接及发送和接收数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/*************************************************************
*                                                                                                   *
* tcp_server.c     *
*                                                                                                    *
**************************************************************/
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <stdlib.h>
#include <netinet/in.h>
#include <string.h>
#define portnum 3333
int main(void)
{
    int sockfd;
    int new_fd;
    struct sockaddr_in server_addr;
    struct sockaddr_in client_addr;
    char buffer[128];
    int nbyte;
    int sin_size;
    /* 1.创建套接字 */
    sockfd = socket(AF_INET, SOCK_STREAM, IPPROTO_IP);
    if(sockfd == -1)
    {
        printf("create socket error !\n");
        exit(1);
    }
    /* 2.1设定要绑定的地址 */
    bzero(&server_addr,sizeof(struct sockaddr_in));    // 清零
    server_addr.sin_family = AF_INET;
    server_addr.sin_port = htons((uint16_t)portnum);
    server_addr.sin_addr.s_addr = htonl(INADDR_ANY);
    /* 2.2绑定地址 */
    if( bind(sockfd, (struct sockaddr *)&server_addr,sizeof(struct sockaddr)) == -1 )
    {
        printf("bin addr error !\n");
    }
    /* 3.监听端口 */
    listen(sockfd, 5);
    while(1)
    {
        sin_size = sizeof(struct sockaddr);
        /* 4.等待连接 */
        new_fd = accept(sockfd, (struct sockaddr *)&client_addr, (socklen_t *)&sin_size);
        printf("server get connection from %s\n", inet_ntoa(client_addr.sin_addr));
        /* 5.接收数据 */
        nbyte = recv(new_fd, (void *)buffer, 128, 0);
        buffer[nbyte] = '\0';
        printf("server received : %s\n", buffer);
        /* 6.结束连接 */
        close(new_fd);
    }
    close(sockfd);
    return 0;
}

/*************************************************************
*                                                            *
*			tcp_clien.c		             *
*                                                            *
**************************************************************/
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <string.h>
#include <netinet/in.h>
#include <stdlib.h>
#define portnum 3333
int main()
{
    int sockfd;
    struct sockaddr_in server_addr;
    char buffer[128];
    /* 1.创建套接字 */
    sockfd = socket(AF_INET, SOCK_STREAM, IPPROTO_IP);
    if(sockfd == -1)
    {
        printf("create socket error !\n");
        exit(1);
    }
    /* 2.1 设置要链接的服务器的地址 */
    bzero(&server_addr,sizeof(struct sockaddr_in));    // 清零
    server_addr.sin_family = AF_INET;
    server_addr.sin_port = htons((uint16_t)portnum);
    server_addr.sin_addr.s_addr = inet_addr("192.168.93.125");
    /* 2.2 连接服务器 */
    if(connect(sockfd, (struct sockaddr *)&server_addr, sizeof(struct sockaddr)) == -1)
    {
        printf("connet error!\n");
        exit(1);
    }
    /* 3. 发送数据 */
    printf("Please input char : \n");
    fgets(buffer,128,stdin);
    send(sockfd,buffer,strlen(buffer),0);
    /* 4. 关闭套接字 */
    close(sockfd);
    return 0;
}

特别提醒:关于tcp_client.c中的ip:192.168.93.125,因为我在同一台主机上面运行(该ip为我主机的ip),
	  所以就直接定死,如果需要在不同机子上运行可以通过传参数的方式。因为服务器地址只有一个,
	  所以两边的服务器地址设定方式就要一样。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值