服务器
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <string.h>
#include <arpa/inet.h>
void Usage(char* proc)
{
printf("usage:%s [local_addr] [local_ port]\n",proc);
}
int startup(char* ip,int port)
{
int sock=socket(AF_INET,SOCK_STREAM,0);
if(sock<0)
{
perror("socket");
return 1;
}
struct sockaddr_in local;
local.sin_family=AF_INET;
local.sin_port=htons(port);
local.sin_addr.s_addr=inet_addr(ip);
if(bind(sock,(struct sockaddr*)&local,sizeof(local))<0)
{
perror("bind");
close(sock);
return 2;
}
if(listen(sock,10)<0)
{
perror("listen");
close(sock);
return 3;
}
printf("bind and listen success,wait accpet.....\n");
return sock;
}
int main(int argc,char* argv[])
{
if(argc!=3)
{
Usage(argv[0]);
return 4;
}
int listen_sock=startup(argv[1],atoi(argv[2]));
while(1)
{
struct sockaddr_in client;
socklen_t len=sizeof(client);
int new_sock=accept(listen_sock,(struct sockaddr*)&client,&len);
if(new_sock<0)
{
perror("accept");
return 5;
}
char buf[1024];
printf("get a connect,ip is %s port is %d\n",
inet_ntoa(client.sin_addr),
ntohs(client.sin_port));
while(1)
{
ssize_t s=read(new_sock,buf,sizeof(buf));
if(s>0)
{
buf[s]=0;
printf("client say:%s\n",buf);
printf("server say:$");
fflush(stdout);
s=read(0,buf,sizeof(buf)-1);
buf[s-1]=0;
write(new_sock,buf,strlen(buf));
}
else
{
printf("client quit\n");
close(new_sock);
break;
}
}
}
close(listen_sock);
return 0;
}
客户端
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <string.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <sys/socket.h>
void Usage(char* proc)
{
printf("usage:%s [local_ip][local_port]\n",proc);
}
int startup(char* ip,int port)
{
int sock=socket(AF_INET,SOCK_STREAM,0);
if(sock<0)
{
perror("socket");
return 1;
}
struct sockaddr_in server;
server.sin_family=AF_INET;
server.sin_port=htons(port);
server.sin_addr.s_addr=inet_addr(ip);
if(connect(sock,(struct sockaddr*)&server,sizeof(server))<0)
{
perror("connect");
return 2;
}
printf("connect success\n");
return sock;
}
int main(int argc,char* argv[])
{
if(argc!=3)
{
Usage(argv[0]);
}
int sock=startup(argv[1],atoi(argv[2]));
while(1)
{
char buf[1024];
printf("client say:#");
fflush(stdout);
ssize_t s=read(0,buf,sizeof(buf)-1);
buf[s-1]=0;
write(sock,buf,strlen(buf));
printf("Please wait...\n");
s=read(sock,buf,strlen(buf));
buf[s]=0;
printf("server echo:#%s\n",buf);
}
close(sock);
return 0;
}
Makefile
.PHONY:all
all:server client
server:server.c
gcc -o $@ $^
client:client.c
gcc -o $@ $^
.PHONY:clean
clean:
rm -f server client
运行结果如下: