service
#include<stdio.h>
#include<strings.h>
#include<stdlib.h>
#include<unistd.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include<sys/types.h>
#include<sys/socket.h>
#define PORT 1234
#define LISTENNUM 20
#define MAXSIZE 1000
int main()
{
int listenfd;
int connfd;
struct sockaddr_in server;
struct sockaddr_in client;
creat_sock:
listenfd = socket(AF_INET,SOCK_STREAM,0);
if(listenfd < 0)
{
perror("socket");
return -1;
}
int opt = SO_REUSEADDR;
setsockopt(listenfd,SOL_SOCKET,SO_REUSEADDR,&opt,sizeof(opt));
bzero(&server,sizeof(server));
server.sin_family = AF_INET;
server.sin_port = htons(PORT);
server.sin_addr.s_addr = htonl(INADDR_ANY);
if(bind(listenfd,(struct sockaddr *)&server,sizeof(server)) < 0)
{
perror("bind");
close(listenfd);
return -1;
}
if(listen(listenfd,LISTENNUM) < 0)
{
perror("listen");
close(listenfd);
return -1;
}
int len;
int num;
pid_t pid;
char buffer[MAXSIZE];
len = sizeof(client);
while(1)
{
connfd = accept(listenfd,(struct sockaddr *)&client,&len);
if(connfd < 0)
{
perror("accept");
close(listenfd);
goto creat_sock;
}
pid = fork();
if(pid < 0)
{
perror("fork");
close(connfd);
close(listenfd);
exit(-1);
}
if(pid > 0)
{
close(connfd);
close(listenfd);
exit(-1);
}
printf("client connect Ip :%s\n",inet_ntoa(client.sin_addr));
num = recv(connfd,buffer,256,0);
if(num < 0)
{
perror("recv");
close(connfd);
close(listenfd);
exit(-1);
}
printf("buffer = %s\n",buffer);
close(connfd);
close(listenfd);
goto creat_sock;
}
return 0;
}
client.c(比较简单与随意)
#include<stdio.h>
#include<stdlib.h>
#include<strings.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include<sys/types.h>
#include<sys/socket.h>
#define PORT 1234
int main()
{
struct sockaddr_in server;
int connfd;
connfd = socket(AF_INET,SOCK_STREAM,0);
bzero(&server,sizeof(server));
server.sin_family = AF_INET;
server.sin_port = htons(PORT);
server.sin_addr.s_addr = inet_addr("127.0.0.1");
connect(connfd,(struct sockaddr *)&server,sizeof(server));
send(connfd,"client connect 1-9",64,0);
close(connfd);
return 0;
}