以下是通过socket,server和client通信的一个例子。
//server
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
static void usage(const char* proc)
{
printf("usage:%s [port]\n", proc);
}
int startup(int _port)
{
int sock = socket(AF_INET, SOCK_STREAM, 0);
if(sock < 0)
{
perror("creat socket fail");
exit(1);
}
struct sockaddr_in server;
memset(&server, 0, sizeof(server));
server.sin_family = AF_INET;
server.sin_port = htons(_port);
server.sin_addr.s_addr = htonl(INADDR_ANY);
if(bind(sock, (struct sockaddr*)&server, sizeof(server)) < 0)
{
perror("bind error");
exit(2);
}
if(listen(sock, 5) < 0)
{
perror("listen error");
exit(3);
}
return sock;
}
int main(int argc, char* argv[])
{
if(argc != 2)
{
usage(argv[0]);
return 3;
}
int listen_socket = startup(atoi(argv[1]));
struct sockaddr_in remote;
socklen_t len = sizeof(struct sockaddr_in);
while(1)
{
int socket = accept(listen_socket, (struct sockaddr*)&remote, &len);
if(socket < 0)
{
perror("accept error");
continue;
}
printf("#client, ip:%s, port:%d#\n", inet_ntoa(remote.sin_addr), ntohs(remote.sin_port));
char buf[1024];
while(1)
{
ssize_t _s = read(socket, buf, sizeof(buf)-1);
if(_s > 0)
{
buf[_s] = 0;
printf("#client# %s\n", buf);
}
else
{
printf("client is quit!\n");
break;
}
}
close(socket);
}
return 0;
}
//client
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
static void usage(const char* proc)
{
printf("usage:%s [ip] [port]\n", proc);
}
int main(int argc, char* argv[])
{
if(argc != 3)
{
usage(argv[0]);
return 3;
}
int sock = socket(AF_INET, SOCK_STREAM, 0);
if(sock < 0)
{
perror("socket error");
exit(1);
}
struct sockaddr_in server;
memset(&server, 0, sizeof(server));
server.sin_family = AF_INET;
server.sin_port = htons(atoi(argv[2]));
server.sin_addr.s_addr = inet_addr(argv[1]);
if(connect(sock, (struct sockaddr*)&server, sizeof(server)) < 0)
{
perror("connect error");
exit(2);
}
char buf[1024];
while(1)
{
printf("#send# ");
fflush(stdout);
ssize_t _s = read(0, buf, sizeof(buf)-1);
buf[_s-1] = 0;
write(sock, buf, _s);
}
close(sock);
return 0;
}