您的位置:首页 > 编程语言 > C语言/C++

C语言实现简单的socket实例

2016-07-26 16:29 696 查看
socket.c

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <sys/socket.h>
#include <errno.h>
#include <netinet/in.h>
#include <arpa/inet.h>

void server() {

int fd = socket(AF_INET, SOCK_STREAM, 0);
if (fd == -1) {
printf("create socket failed! %s\n", strerror(errno));
return;
}
struct sockaddr_in addr;
memset(&addr, 0, sizeof(addr));
addr.sin_family = AF_INET;
addr.sin_port = htons(8080);
addr.sin_addr.s_addr = INADDR_ANY;
if (bind(fd, (struct sockaddr *)&addr, sizeof(struct sockaddr)) == -1) {
printf("socket bind failed! %s\n", strerror(errno));
return;
}
if (listen(fd, 20) == -1) {
printf("socket listen! %s\n", strerror(errno));
return;
}
struct sockaddr_in client_addr;
int client_addr_len = sizeof(client_addr);
memset(&client_addr, 0, sizeof(client_addr));
while (1) {

int client_fd = accept(fd, (struct sockaddr *)&client_addr, &client_addr_len);
if (client_fd == -1) {
printf("socket accept failed! %s\n", strerror(errno));
return;
}
char str[10];
memset(str, 0, sizeof(str));
while (recv(client_fd, str, sizeof(str)-1, 0) > 0) {
printf("%s", str);
memset(str, 0, sizeof(str));
}
printf("\n");
close(client_fd);
}
return;
}

void client() {
int fd = socket(AF_INET, SOCK_STREAM, 0);
if (fd == -1) {
printf("socket create failed! %s\n", strerror(errno));
return;
}
struct sockaddr_in addr;
addr.sin_family = AF_INET;
addr.sin_port = htons(8080);
addr.sin_addr.s_addr = inet_addr("127.0.0.1");
if (connect(fd, (struct sockaddr *)&addr, sizeof(struct sockaddr_in)) == -1) {
printf("client socket connect failed! %s\n", strerror(errno));
return;
}
char str[100];
memset(str, 0, sizeof(str));
strcpy(str, "hello socket!hello socket!hello socket!hello socket!hello socket!hello socket!hello socket!hello socket!hello socket!");
if (send(fd, str, strlen(str), 0) == -1) {
printf("client socket send failed! %s\n", strerror(errno));
return;
}
close(fd);
return;
}

int main(int argc, char *argv[]) {
if (!strcmp(argv[1], "server")) {
server();
} else if(!strcmp(argv[1], "client")) {
client();
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c语言 socket