//服务端程序
typedef struct server_context_st
{
int count;
int clifds[SIZE];
fd_set allfds;
int maxfd;
}server_context_st;
int main()
{
struct sockaddr_in server_addr;
struct sockaddr_in client_addr;
server_context_st server;
char msg[1024] = "";
const char* str = "datakkkkkkkk";
int sockfd = -1;
if((sockfd = socket(AF_INET, SOCK_STREAM, IPPROTO_IP)) == -1)
{
fprintf(stderr, "socket create failed");
return -1;
}
bzero(&server_addr, sizeof(server_addr));
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(PORT);
server_addr.sin_addr.s_addr = htonl(INADDR_ANY);
if(bind(sockfd, (struct sockaddr*)&server_addr, sizeof(struct sockaddr)) == -1)
{
perror("bind failed.");
return -1;
}
listen(sockfd, 5);
int sClient;
struct sockaddr_in remoteAddr;
int nAddrlen = sizeof(struct sockaddr);
ACCEPT:
printf("acceptting....\n");
sClient = accept(sockfd, (struct sockaddr*)&remoteAddr, &nAddrlen);
if(sClient == -1)
{
perror("accept error!");
return -1;
}
printf("accept a socket:(%s:%d)\n", inet_ntoa(remoteAddr.sin_addr), remoteAddr.sin_port);
FD_ZERO(&server.allfds);
FD_SET(sClient, &server.allfds);
struct timeval timeout = {0, 500};
server.clifds[server.count++] = sClient;
server.maxfd = sClient;
while(1)
{
fd_set readSet, writeSet;
FD_ZERO(&readSet);
readSet = server.allfds;
FD_ZERO(&writeSet);
writeSet = server.allfds;
int total = select(server.maxfd+1, &readSet, &writeSet, NULL, &timeout);
if(total == -1)
{
continue;
}
for(int i = 0; i < server.count; i++)
{
int ss = server.clifds[i];
if(FD_ISSET(ss, &readSet) != 0)
{
int recvBytes = recv(ss, msg, COUNTOF(msg), 0);
if(recvBytes == -1 || recvBytes == 0)
{
close(ss);
FD_CLR(ss, &server.allfds);
printf("disconnect a socket.\n");
server.count = 0;
goto ACCEPT;
}
else
{
printf("%s\n", msg);
bzero(msg, sizeof(msg));
}
}
}
}
close(sockfd);
close(sClient);
return 0;
}
#include <sys/types.h>
#include <sys/socket.h>
#include <unistd.h>
#include <stdio.h>
#include <string.h>
#include <strings.h>
#include <inttypes.h>
#include <netinet/in.h>
#include <sys/select.h>
#include <arpa/inet.h>
#include <errno.h>
#define PORT 5566
int main()
{
struct sockaddr_in server_addr;
struct sockaddr_in client_addr;
int sockfd = -1;
if((sockfd = socket(AF_INET, SOCK_STREAM, IPPROTO_IP)) == -1)
{
perror("socket create failed");
return -1;
}
bzero(&server_addr, sizeof(server_addr));
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(PORT);
server_addr.sin_addr.s_addr = inet_addr("10.10.63.70");
if(connect(sockfd, (struct sockaddr*)&server_addr, sizeof(struct sockaddr)) == -1)
{
perror("connect server failed\n");
return -1;
}
char chs[512] = "";
ssize_t nbytes = 0;
while(1)
{
scanf("%s", chs);
nbytes = send(sockfd, chs, strlen(chs), 0);
if(nbytes < 0)
{
fprintf(stderr, strerror(errno));
break;
}
printf("send %d bytes.\n", nbytes);
memset(chs, 0, sizeof(chs));
}
close(sockfd);
return 0;
}