socket通信实例

//server
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <stdio.h>

#define BACK_LOG 20
#define BUF_SIZE 64

int main()
{
    int srvSockFd, connSockFd;
    char recvMsg[BUF_SIZE];
    struct sockaddr_in myAddr, cliAddr;
    socklen_t cliAddrLen;
    int recvLen;
    myAddr.sin_family = AF_INET;
    myAddr.sin_port = htons(10001);
    myAddr.sin_addr.s_addr = INADDR_ANY;
    
    if((srvSockFd = socket(PF_INET, SOCK_STREAM, 0)) < 0)
    {
        perror("socket");
        return -1;
    }
    
    if(bind(srvSockFd, (struct sockaddr*)&myAddr, sizeof(struct sockaddr)) < 0)
    {
        perror("bind");
        return -1;
    }
    
    if(listen(srvSockFd, BACK_LOG) < 0)
    {
        perror("listen");
        return -1;
    }
    
    cliAddrLen = sizeof(struct sockaddr_in);
    while(1)
    {
        if((connSockFd = accept(srvSockFd, (struct sockaddr*)&cliAddr, &cliAddrLen)) < 0)
        {
            perror("accept");
            return -1;
        }
        printf("accept client: %s\r\n", inet_ntoa(cliAddr.sin_addr));
        sleep(10);
        while(1)
        {
            if((recvLen = recv(cliSockFd, recvMsg, BUF_SIZE, 0)) > 0)
            {
                recvMsg[recvLen] = '\0';
                printf("Recv msg from client: %s\r\n", recvMsg);
                if(0 == strcmp("exit", recvMsg))
                {
                    close(cliSockFd);
                    return 0;
                }
            }
            else if(0 == recvLen)
            {
                close(connSockFd);
                return 0;
            }
            else
            {
                perror("recv");
                return -1;
            }            
            printf("recvLen=%d\r\n",recvLen);
        }
    }

    close(srvSockFd);

    return 0;
}


 

 

 

 

 

 

//client
/*
实现功能:在客户端输入任意字符串,在服务器端将接收到的内容显示
*/
#include <sys/types.h>
#include <sys/socket.h>
#include <memory.h>
#include <netinet/in.h>
#include <stdio.h>

#define BUF_SIZE 64
int main()
{
	int cliSockFd;
	char sendMsg[BUF_SIZE];
	char recvMsg[BUF_SIZE];
	int recvLen;
	int sendLen;
	struct sockaddr_in  srvAddr;
	printf("%d\r\n", __LINE__);
	srvAddr.sin_family = AF_INET;
	srvAddr.sin_port = htons(10001);
	inet_aton("127.0.0.1", &srvAddr.sin_addr);
	printf("%d\r\n", __LINE__);
	if((cliSockFd = socket(PF_INET, SOCK_STREAM, 0)) < 0)
	{
		perror("socket");
		return -1;
	}
	
	if(connect(cliSockFd, (struct sockaddr*)&srvAddr, sizeof(struct sockaddr)) < 0)
	{
		perror("connect");
		return -1;
	}
	printf("Connected to server\r\n");
	sleep(10);
	while(1)
	{
		memset(sendMsg, 0, sizeof(sendMsg));
		printf("please input mssege to send:\r\n");
		scanf("%s", sendMsg);
		if(0 == strcmp("quit", sendMsg))
		{
			break;
		}
		sendLen = send(cliSockFd, sendMsg, strlen(sendMsg), 0);
		printf("sendLen=%d\r\n", sendLen);

	}

	close(cliSockFd);
	sleep(10);
	return 0;
}



 

recv返回值:

 

https://blog.csdn.net/henry115/article/details/7054603

 

bind: Address already in use:

https://blog.csdn.net/msdnwolaile/article/details/50743254

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 、4下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。、可私 6信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 、4下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。、可 6私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 、4下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。、可私 6信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值