服务端
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
int server_init(const char *ipstr, ushort port, int backlog)
{
int s = socket(AF_INET, SOCK_STREAM, 0);
if(0 > s){
perror("socket");
return -1;
}
struct sockaddr_in addr = {
.sin_family = AF_INET,
.sin_port = htons(port),
.sin_addr = {
.s_addr = inet_addr(ipstr),
},
.sin_zero = {0},
};
socklen_t len = sizeof(addr);
if(0 > bind(s, (struct sockaddr*) &addr, len)){
perror("bind");
goto ERR_STEP;
}
if(0 > listen(s, backlog)){
perror("listen");
goto ERR_STEP;
}
return s;
ERR_STEP:
close(s);
return -1;
}
int main()
{
int s = server_init("192.168.2.104", 59999, 10);
if(0 > s){
return -1;
}
printf("wait for a client ...\n");
struct sockaddr_in addr;
socklen_t len = sizeof(addr);
int rws = accept(s, (struct sockaddr *)&addr, &len);
if(0 > rws){
perror("accept");
goto ERR_STEP;
}
char str[INET_ADDRSTRLEN];
if(inet_ntop(AF_INET, &addr.sin_addr.s_addr, str, INET_ADDRSTRLEN)){
printf("client ip: %s ", str);
}
printf("port : %u\n", ntohs(addr.sin_port));
printf("listen: %d; RW: %d\n", s, rws);
close(rws);
ERR_STEP:
close(s);
printf("server is leave.\n");
return 0;
}
客户端
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>,
#include <unistd.h>
int main()
{
int s = socket(AF_INET, SOCK_STREAM, 0);
if(0 > s){
perror("socket");
return -1;
}
struct sockaddr_in s_addr = {
.sin_family = AF_INET,
.sin_port = htons(59999),
.sin_addr = {
.s_addr = inet_addr("192.168.2.104"),
},
.sin_zero = {0},
};
socklen_t s_len = sizeof(s_addr);
if(0 > connect(s, (struct sockaddr*) &s_addr, s_len)){
perror("connect");
goto ERR_STEP;
}
printf("Connected\n");
ERR_STEP:
close(s);
printf("client is leave.\n");
return 0;
}