用Socket编写TCP程序(C/C++)
出自Linux Wiki
本文介绍利用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>
进行客户端连接的主要步骤
1.了解如下信息:连接到的服务器的域名或IP地址,服务器端的端口号
2.定义如下变量
struct sockaddr_in pin; struct hostent *nlp_host; int sd; char host_name[256]; int port;
并赋值,如:
strcpy(host_name,"www.linux-wiki.cn"); port=80;
3.解析域名,如果是IP则不用解析,如果出错,显示错误信息
while ((nlp_host=gethostbyname(host_name))==0){ printf("Resolve Error!\n"); }
4.设置pin变量,这一部分比较复杂,不过通常只要直接复制就可以了~~
bzero(&pin,sizeof(pin)); pin.sin_family=AF_INET; //使用ARPA网际协议,一般都是这个 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); //设置端口
5.建立socket
sd=socket(AF_INET,SOCK_STREAM,0);
6.建立连接
while (connect(sd,(sockaddr*)&pin,sizeof(pin))==-1){ printf("Connect Error!\n"); }
7.发送信息的常用方法:
send(int sd,char * data,int len,0);
其中sd是socket变量名(文件描述符),data是数据缓冲区的地址,len是缓冲区的大小,0通常无需更改
8.接收信息的常用方法:
recv(int sd,char * buf,int maxlen,0);
9.关闭连接:
close(int sd);
服务器端的主要步骤
待续