参考博客:http://blog.csdn.net/zqixiao_09/article/details/50505795
https://www.cnblogs.com/uestc-mm/p/7630145.html
server:
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h>
#include <stdio.h>
#include <errno.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <stdio.h>
int main(int argc, char **argv){
struct sockaddr_in server_addr;
struct sockaddr_in client_addr;
int struct_len, fd, new_fd, numbytes, i;
char buff[1024];
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(8218);
server_addr.sin_addr.s_addr = INADDR_ANY;
bzero(&(server_addr.sin_zero), 8);
numbytes = sizeof(struct sockaddr_in);
fd = socket(AF_INET, SOCK_STREAM, 0);
if(-1 == fd){
printf("socket open fail\n");
return -1;
}
while(bind(fd, (struct sockaddr *)&server_addr, sizeof(struct sockaddr_in) ) == -1);
printf("Bind Success !\n");
while(listen(fd, 10) == -1);
printf("Listen.....\n");
printf("Reddy for Accept, Wait.....\n");
new_fd = accept(fd, (struct sockaddr *)&client_addr, &numbytes);
printf("Get client...\n");
numbytes = send(new_fd, "Wellcome to my server\n", 21, 0);
while((numbytes = recv(new_fd, buff, 1024, 0)) > 0){
buff[numbytes] = '\0';
printf("%s\n", buff);
if(send(new_fd, buff, numbytes, 0) < 0){
perror("write");
return 1;
}
}
close(new_fd);
close(fd);
return 0;
}
client:
#include <stdio.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <sys/socket.h>
#include <stdlib.h>
#include <arpa/inet.h>
#include <string.h>
#include <unistd.h>
int main(int argc, char **argv){
struct sockaddr_in server_addr;
int fd, numbytes;
char buff[1024];
while((fd = socket(AF_INET, SOCK_STREAM, 0)) == -1);
printf("socket open success!\n");
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(8218);
server_addr.sin_addr.s_addr = inet_addr("127.0.0.1");
bzero(&(server_addr.sin_zero), 8);
while(connect(fd, (struct sockaddr *)&server_addr, sizeof(struct sockaddr_in))== -1);
printf("We get server success!\n");
numbytes = recv(fd, buff, 1024, 0);
buff[numbytes] = '\0';
printf("%s\n", buff);
while(1){
printf("Please enter trans info:\n");
scanf("%s", buff);
numbytes = send(fd, buff, strlen(buff), 0);
numbytes = recv(fd, buff, 1024, 0);
buff[numbytes] = '\0';
printf("received:%s\n", buff);
}
close(fd);
return 0;
}
注意:必须同一个网段,若非同一个网段,必须过三层路由。