网络编程学习(三)_Linux下C++ Socket编程实例

一、流程图
在这里插入图片描述
二、代码实例

1、client.c

#include <stdio.h>
#include <ctype.h>
#include <unistd.h>
#include <sys/types.h>
#include <arpa/inet.h>
#include <sys/socket.h>
#include <stdlib.h>
#include <string.h>

int main(int argc, char *argv[])
{
    int sockfd = socket(AF_INET, SOCK_STREAM, 0);

    struct sockaddr_in serv_addr; 
    memset(&serv_addr,0,sizeof(serv_addr));

    serv_addr.sin_family = AF_INET;                //选择协议族为IPV4
    serv_addr.sin_port = htons(9000);         //连接到的服务器端口,服务器监听这个地址

    if(inet_pton(AF_INET, "127.0.0.1", &serv_addr.sin_addr) <= 0)
    {
        printf("inet_pton() failed exit!\n");
        exit(1);
    }

    if(connect(sockfd, (struct sockaddr*)&serv_addr, sizeof(serv_addr)) < 0)
    {
        printf("connect() failed exit!\n");
        exit(1);        
    }

    int len;
    char recvline[1024]; 
    char writeline[1024];

    while(1)
    {
        memset(recvline, 0, sizeof(recvline));
        memset(writeline, 0, sizeof(writeline));

        //发送消息
		printf("send to server:");
		fgets(writeline,sizeof(writeline),stdin);
		write(sockfd,writeline,strlen(writeline));

        len = read(sockfd,recvline,1024);

        if(len == 0)
        {
            printf("server is close");
        }

        printf("receive from server:%s\n",recvline);
    }
    close(sockfd); //关闭套接字
    printf("end exit !\n");
    return 0;    

}

2、sever.c

#include <stdio.h>
#include <ctype.h>
#include <unistd.h>
#include <sys/types.h>
#include <arpa/inet.h>
#include <sys/socket.h>
#include <stdlib.h>
#include <string.h>

int main(int argc, char *argv[])
{
    int listenfd = socket(AF_INET, SOCK_STREAM, 0);

    struct sockaddr_in serv_addr;                  //服务器的地址结构体
    memset(&serv_addr,0,sizeof(serv_addr));

    //设置本服务器要监听的地址和端口,这样客户端才能连接到该地址和端口并发送数据
    serv_addr.sin_family = AF_INET;                //选择协议族为IPV4
    serv_addr.sin_port = htons(9000);         //绑定我们自定义的端口号,客户端程序和我们服务器程序通讯时,就要往这个端口连接和传送数据
    serv_addr.sin_addr.s_addr = htonl(INADDR_ANY); //监听本地所有的IP地址;INADDR_ANY表示的是一个服务器上所有的网卡(服务器可能不止一个网卡)多个本地ip地址都进行绑定端口号,进行侦听。

    bind(listenfd, (struct sockaddr*)&serv_addr, sizeof(serv_addr));

    listen(listenfd, 32);

    int connfd = accept(listenfd, (struct sockaddr*)NULL, NULL);

    char recvline[1024];
	char writeline[1024];

    for(;;)
    {
        memset(recvline, 0, sizeof(recvline));
        memset(writeline, 0, sizeof(writeline));

        int len = read(connfd,recvline,sizeof(recvline));
 		if(len==0)//表示断开连接
		{
			printf("client is close....\n");
		}
		printf("receive from client:%s",recvline);       

        printf("send to client:");
		fgets(writeline,sizeof(writeline),stdin);

        //发送数据包给客户端
        write(connfd,writeline,strlen(writeline)); //注意第一个参数是accept返回的connfd套接字
        
        //只给客户端发送一个信息,然后直接关闭套接字连接;
    } 
    
    close(connfd); 
    close(listenfd);
    return 0;    

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值