//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