Linux下套接字编程简例
来源:互联网 发布:程序员适合写那些博客 编辑:程序博客网 时间:2024/05/22 12:51
下面设计一个简单的CS例子:服务端监听某个端口,接受一个连接,接收该连接传来的数据并显示;客户端连接服务端,把标准输入的信息发给服务端。
服务端代码:
#include <stdio.h>#include <stdlib.h>#include <string.h>#include <sys/socket.h>#include <netinet/in.h>#include <arpa/inet.h>int main(int argc, char *argv[]){ // 创建TCP套接字 int sock = socket(AF_INET, SOCK_STREAM, 0); if (-1 == sock) { perror("socket"); return -1; } // 填充地址结构体:监听8888端口 struct sockaddr_in addr; bzero(&addr, sizeof(addr)); addr.sin_family = AF_INET; addr.sin_addr.s_addr = INADDR_ANY; // 任意接口地址 addr.sin_port = htons(8888); // 8888端口,htons从主机序到网络序 // 绑定地址 int ret = bind(sock, (struct sockaddr *)&addr, sizeof(addr)); if (-1 == ret) { perror("bind"); return -1; } // 开始监听 ret = listen(sock, 10); if (-1 == ret) { perror("listen"); return -1; } // 接受新连接 int len = sizeof(addr); int conn = accept(sock, (struct sockaddr *)&addr, &len); if (-1 == conn) { perror("accept"); return -1; } // 新连接対端信息 printf("accept %s:%d\n\n", inet_ntoa(addr.sin_addr), ntohs(addr.sin_port)); while (1) { // 接收信息 char buffer[1024]; len = recv(conn, buffer, sizeof(buffer)-1, 0); if (-1 == len) { perror("recv"); return -1; } else if (0 == len) // 连接断开 { break; } buffer[len] = '\0'; printf("%s", buffer); } return 0;}
客户端代码:
#include <stdio.h>#include <stdlib.h>#include <string.h>#include <sys/socket.h>#include <netinet/in.h>int main(int argc, char *argv[]){ // 创建TCP套接字 int conn = socket(AF_INET, SOCK_STREAM, 0); if (-1 == conn) { perror("socket"); return -1; } // 填充地址结构体:连接本机的8888端口 struct sockaddr_in addr; bzero(&addr, sizeof(addr)); addr.sin_family = AF_INET; addr.sin_addr.s_addr = inet_addr("127.0.0.1"); addr.sin_port = htons(8888); // 连接到服务端:本机的8888端口 int ret = connect(conn, (struct sockaddr *)&addr, sizeof(addr)); if (-1 == ret) { perror("connect"); return -1; } while (1) { // 从标准输入读入 char buffer[1024]; int len = read(0, buffer, sizeof(buffer)); if (-1 == len) { perror("read"); return -1; } else if (0 == len) { break; // 输入结束 } // 将输入信息发给服务端 len = send(conn, buffer, len, 0); if (-1 == len) { perror("send"); return -1; } } return 0;}
当然了,这两个程序还是相当丑陋的,网络编程要注意很多细节。尽管如此,对于网络编程初学者弄懂socket编程流程还是有帮助的。
0 0
- Linux下套接字编程简例
- linux下原始套接字编程
- linux套接字编程
- Linux - 套接字编程
- linux套接字编程
- linux 套接字编程
- Linux--编程--套接字
- Linux编程---套接字
- linux套接字编程
- Linux套接字编程
- linux套接字编程
- Linux套接字编程
- Linux网络编程:原始套接字编程(下)
- Linux系统编程下的套接字socket编程函数
- Linux网络编程:原始套接字的魔力【下】
- Linux网络编程:原始套接字的魔力【下】
- Linux网络编程:原始套接字的魔力【下】
- linux 网络编程--原始套接字(下)
- 为什么会有hibernate
- hibernate 的 CascadeType 属性 和 FetchType属性
- 网络编程基础(2)----------UDP客户端与服务器
- apache commons学习系列之Email组件
- 3个点的action button 不显示问题
- Linux下套接字编程简例
- Ultimaker2 3D打印机源文件在线公布
- android4.2源代码编译环境搭建
- Arduino舵机控制1
- Linux下基于EPOLL 模型,实现用户登录,客户端采用QT
- maven学习总结初步
- rpm,yum和apt使用详解
- 2014 Shenzhen Maker Faire见闻
- ZOJ 1007 Numerical Summation of a Series (数学)