用Socket编写TCP程序(C/C++)

出自Linux Wiki

在2007年2月25日 (日) 06:37由Chenxing (讨论 | 贡献)所做的修订版本
(差异) ←上一修订 | 最新修订 (差异) | 下一修订→ (差异)

本文介绍利用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);

服务器端的主要步骤

待续

个人工具
简体繁体转换