社区微信群开通啦,扫一扫抢先加入社区官方微信群
社区微信群
先来回顾下c语言的,c语言的helloword程序如下
// main.c
#include<stdio.h>
int main() {
printf("hello world");
}
编译 gcc main.c
运行 ./a.out
输出 hello world
1.创建套接字
type:
2.socket Address socket 地址结构体
3. 字节序和网络字节序
在网络数据传输中,为了方便起见统一成大端序:
4.将字符串信息转换成网络字节序的整数型
5.bind 绑定地址信息
6. listen 监听函数
7. accept
注意:这里参数的地址是客户端地址信息
【代码】
//httpserver.c
#include <sys/types.h>
#include <sys/socket.h>
#include <stdio.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <netinet/in.h>
int main() {
int server_sockfd, client_sockfd;
int server_len, client_len;
struct sockaddr_in server_address,client_address;
//创建套接字
server_sockfd = socket(AF_INET, SOCK_STREAM, 0); //协议族信息,套接字数据传输方式为面向消息的TCP
//初始化服务器地址信息 sockaddr_in
server_address.sin_family = AF_INET;//地址族
server_address.sin_addr.s_addr = inet_addr(INADDR_ANY); // 监听本机所有IP
server_address.sin_port = htons(10000); // 设置端口号,注意这里的 htons 方法(主机序转网络序,s指的是short)
server_len = sizeof(server_address);
bind(server_sockfd, (struct sockaddr *)&server_address, server_len);
listen(server_sockfd, 5);//设置同时监听最大个数,其实就是队列长度
while(1) {
char buffer[5000];
char send_str[] = "hello world !n"; // 准备给连接过来的客户端发送的字符串
client_len = sizeof(client_address);
//accept的第一个参数是监听套接字,相当于门卫的功能;后两个都是客户端的地址信息
client_sockfd = accept(server_sockfd,(struct sockaddr *)&client_address, &client_len);//会新创建一个套接字传给client_sockfd
read(client_sockfd, &buffer, 5000); // 接收客户端传来的字符,存到buffer中
printf("%s", buffer); // 打印我们接收到的字符
write(client_sockfd, &send_str, sizeof(send_str)/sizeof(send_str[0])); // 向客户端发送数据,这里的 read write 和 和文件读写时没什么区别
close(client_sockfd);
}
}
现在我们来一起编译运行我们的第一个http服务器吧!!
新启一个终端,然后用telnet 尝试连接我们的服务器。
执行命令 telnet 127.0.0.1 10000
然后将想发给客户端的消息输入
屏幕输出大概为这样:
再返回查看我们的服务器屏幕,就能看到我们客户端发过来的信息,说明我们的服务器能成功接收并返回数据了。
怎么样,socket用起来是不是很....爽.......
参考:《TCP/IP网络编程》韩.尹圣雨
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!