查看源代码
出自Linux Wiki
对
用Socket编写TCP程序(C/C++)
的源代码
根据以下的原因,您无权限进行编辑这个页面操作:
您刚才请求的操作只有这个用户组中的用户才能使用:
用户
您可以查看并复制此页面的源代码:
本文介绍利用[[Linux]]下的C语言[[Socket]]函数建立[[TCP连接]],兼容C++。 利用TCP连接,可以进行HTTP、FTP等常见协议的信息传输,是Linux[[:Category:网络编程|网络编程]]的重要部分。 ==需要引用的头文件== 进行网络编程,通常需要引用如下头文件 <source lang=C> #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <arpa/inet.h> #include <netdb.h> #include <unistd.h> //以下头文件是为了使样例程序正常运行 #include <string.h> #include <stdio.h> #include <stdlib.h> </source> ==客户端程序== <source lang=C> struct sockaddr_in pin; struct hostent *nlp_host; int sd; char host_name[256]; int port; //初始化主机名和端口。主机名可以是IP,也可以是可被解析的名称 strcpy(host_name,"www.linux-wiki.cn"); port=80; //解析域名,如果是IP则不用解析,如果出错,显示错误信息 while ((nlp_host=gethostbyname(host_name))==0){ printf("Resolve Error!\n"); } //设置pin变量,包括协议、地址、端口等,此段可直接复制到自己的程序中 bzero(&pin,sizeof(pin)); pin.sin_family=AF_INET; //AF_INET表示使用IPv4 pin.sin_addr.s_addr=htonl(INADDR_ANY); pin.sin_addr.s_addr=((struct in_addr *)(nlp_host->h_addr))->s_addr; pin.sin_port=htons(port); //建立socket sd=socket(AF_INET,SOCK_STREAM,0); //建立连接 while (connect(sd,(struct sockaddr*)&pin,sizeof(pin))==-1){ printf("Connect Error!\n"); } </source> 至此,与服务器端的连接已建立,通信方法见最后一部分。 ==服务器端程序== 本段是C++代码。 <source lang=cpp> int serverSocket; struct sockaddr_in serverAddr; struct sockaddr_in clientAddr; // 用port保存使用的端口 int port=8000; // 建立Socket,并设置 serverSocket = socket(AF_INET, SOCK_STREAM, 0); // 设置socket选项,这是可选的,可以避免服务器程序结束后无法快速重新运行 int val=1; setsockopt(serverSocket, SOL_SOCKET, SO_REUSEADDR, &val, sizeof(val)); // 定义端口和监听的地址 serverAddr.sin_family = AF_INET; serverAddr.sin_port = htons(port); serverAddr.sin_addr.s_addr = htonl(INADDR_ANY); memset(&(serverAddr.sin_zero), 0, 8); int rc = bind(serverSocket, (struct sockaddr*) &serverAddr, sizeof(struct sockaddr)); if (rc == -1) { printf("Bad bind\n"); exit(1); } // 让serverSocket开始监听,客户队列长为5 rc = listen(serverSocket, 5); if (rc == -1) { printf("Bad listen\n"); exit(1); } // 等待客户连接 int sock; int clientAddrSize = sizeof(struct sockaddr_in); sock = accept(serverSocket, (struct sockaddr*) &clientAddr, (socklen_t*) &clientAddrSize); </source> 这样,连接就已建立,返回的sock就是一个新的socket,可以用来通信。 ==通信方法== ===发送信息=== send(int sd,char * data,int len,0); 其中sd是socket变量名([[文件描述符]]),data是数据缓冲区的地址,len是缓冲区的大小,0通常无需更改 ===接收信息=== recv(int sd,char * buf,int maxlen,0); ===关闭连接=== close(int sd); [[Category: 网络编程]] [[Category: C/C++编程]]
返回到
用Socket编写TCP程序(C/C++)
。
导航
首页
社区入口
当前事件
最近更改
随机页面
帮助
查看
页面
讨论
查看源代码
历史
个人工具
登录/创建账户
搜索
简体繁体转换
不转换
简体
繁體
工具箱
链入页面
链出更改
特殊页面