用Socket编写TCP程序(C/C++)(转)
生活随笔
收集整理的这篇文章主要介绍了
用Socket编写TCP程序(C/C++)(转)
小编觉得挺不错的,现在分享给大家,帮大家做个参考.
本文介绍利用Linux下的C语言Socket函数建立TCP连接,兼容C++。
利用TCP连接,可以进行HTTP、FTP等常见协议的信息传输,是Linux网络编程的重要部分。
目录[隐藏]
|
需要引用的头文件
进行网络编程,通常需要引用如下头文件
#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>客户端程序
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"); }至此,与服务器端的连接已建立,通信方法见最后一部分。
服务器端程序
本段是C++代码。
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);这样,连接就已建立,返回的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);转自:http://linux-wiki.cn/wiki/zh-hans/%E7%94%A8Socket%E7%BC%96%E5%86%99TCP%E7%A8%8B%E5%BA%8F%EF%BC%88C/C%2B%2B%EF%BC%89
--------------------------------------------------------------------自学笔记-------------------------------------------------------------------- //创建Socketint sd = socket(AF_INET, SOCK_STREAM, 0);struct sockaddr_in address;//设置pin变量,包括协议、地址、端口等bzero(&address, sizeof(address));address.sin_family = AF_INET; //AF_INET表示使用IPv4address.sin_addr.s_addr = inet_addr(MY_HOST);address.sin_port = htons(MY_PORT);//建立TCP连接int ret = connect(sd, (struct sockaddr*)&address, sizeof(address));//连接失败if (ret == -1){close(sd);return false;}//发送信号char* sigUsr1 = "signal SIGUSR1";write(sd, sigUsr1, sizeof(sigUsr1));//关闭连接 close(sd);return true;
转载于:https://www.cnblogs.com/veins/p/3153491.html
总结
以上是生活随笔为你收集整理的用Socket编写TCP程序(C/C++)(转)的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: 5求名字,谢谢
- 下一篇: [转]C++学习:VC++动态链接库(D