server端
#include<stdio.h>
#include<stdlib.h>
#include<errno.h>
#include<string.h>
#include<sys/types.h>
#include<netinet/in.h>
#include<sys/socket.h>
#include<sys/wait.h>
#include<unistd.h>
#include<arpa/inet.h>
#define BUF_LEN 1024
#define MYPORT 8888
#define BACKLOG 10
int main(int argc, char **argv)
{
int s_s;
int s_c;
socklen_t len;
int err = -1;
struct sockaddr_in6 local_addr;
struct sockaddr_in6 client_addr;
char buf[BUF_LEN + 1];
s_s = socket(PF_INET6, SOCK_STREAM, 0);
if(s_s == -1) {
perror("socket error");
return(1);
} else {
printf("socket() success\n");
}
bzero(&local_addr, sizeof(local_addr));
local_addr.sin6_family = PF_INET6;
local_addr.sin6_port = htons(MYPORT);
local_addr.sin6_addr = in6addr_any;
err = bind(s_s, (struct sockaddr *)&local_addr, sizeof(struct sockaddr_in6));
if(err = -1) {
perror("bind error-->");
// return(1);
} else {
printf("bind() success\n");
}
err = listen(s_s, BACKLOG);
if(err = -1) {
perror("listen error");
// return(1);
} else {
printf("listen() success\n");
}
while(1) {
len = sizeof(struct sockaddr);
// printf("=================\n");
s_c = accept(s_s, (struct sockaddr*)&client_addr, &len);
if(s_c == -1) {
perror("accept error");
return(errno);
} else {
inet_ntop(AF_INET6, &client_addr.sin6_addr, buf, sizeof(buf));
printf("a client from ip: %s, port: %d, socket %d\n", buf, client_addr.sin6_port, s_c);
}
bzero(buf, BUF_LEN + 1);
strcpy(buf, "From Server");
len = send(s_c, buf, strlen(buf), 0);
if(len < 0){
printf("message '%s' send error, error:%d, '%s'\n", buf, errno, strerror(errno));
} else {
printf("message '%s' send success:%d bytes\n", buf, len);
}
bzero(buf, BUF_LEN + 1);
len = recv(s_c, buf, BUF_LEN, 0);
if(len < 0){
printf("recv message error, error:%d, '%s'\n", buf, errno, strerror(errno));
} else {
printf("message '%s' recv success:%d bytes\n", buf, len);
}
close(s_c);
}
close(s_s);
return 0;
}
client
#include<stdio.h>
#include<string.h>
#include<errno.h>
#include<sys/socket.h>
#include<resolv.h>
#include<stdlib.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include<unistd.h>
#define BUF_LEN 1024
#define MYPORT 8888
#define BACKLOG 10
int main(int argc, char **argv)
{
int s_c;
socklen_t len;
int err = -1;
struct sockaddr_in6 server_addr;
char buf[BUF_LEN + 1];
s_c = socket(PF_INET6, SOCK_STREAM, 0);
bzero(&server_addr, sizeof(server_addr));
server_addr.sin6_family = PF_INET6;
server_addr.sin6_port = htons(MYPORT);
server_addr.sin6_addr = in6addr_any;
err = connect(s_c, (struct sockaddr*)&server_addr, sizeof(server_addr));
bzero(buf, BUF_LEN+1);
len = recv(s_c, buf, BUF_LEN, 0);
printf("RECVED: %d bytes: %s\n", len, buf);
bzero(buf, BUF_LEN + 1);
strcpy(buf, "From client");
len = send(s_c, buf, strlen(buf), 0);
close(s_c);
return 0;
}