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;
}
#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;
}
相关文章推荐
- java-模拟tomcat服务器
- Linux socket 初步
- 如何组织构建多文件 C 语言程序(二)
- 如何写好 C main 函数
- java socket 注意的地方
- java socket 注意的地方
- C#基于socket模拟http请求的方法
- Lua和C语言的交互详解
- 简单的Ruby中的Socket编程教程
- Socket不能选择本地IP连接问题如何解决
- C#之Socket操作类实例解析
- 使用C#来编写一个异步的Socket服务器
- C#使用Socket快速判断数据库连接是否正常的方法
- 关于C语言中参数的传值问题
- 简要对比C语言中三个用于退出进程的函数
- 深入C++中API的问题详解
- 基于C语言string函数的详解
- C语言中fchdir()函数和rewinddir()函数的使用详解
- C语言内存对齐实例详解
- C语言编程中统计输入的行数以及单词个数的方法