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

/*************************************************************

*                                                                                                   *

* 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),
	  所以就直接定死,如果需要在不同机子上运行可以通过传参数的方式。因为服务器地址只有一个,
	  所以两边的服务器地址设定方式就要一样。


 
 

猜你喜欢

转载自blog.csdn.net/perfect1t/article/details/78107715