..
2.2原理说明书 2.3程序注释
/******************************************************\\ * client.c - 简单的 TCP/UDP 套接字客户程序 windows环境 * \\******************************************************/ #include
#pragma comment (lib,\添加‘ws2_32’库 int main(void) {
unsigned short port = 5001;
//端口号
//缺省使用TCP连接
int socket_type = SOCK_STREAM;
a
..
char Buffer[1280]; //收发缓冲区 unsigned int addr; //IP地址变量 int retval,i;
//临时变量
struct sockaddr_in server, from; //套接字地址结构变量 struct hostent *hp; WSADATA wsaData; SOCKET conn_socket;
//主机信息结构变量指针 //windows套接字信息 //套接字变量
//先输入客户程序所需要的基本信息:服务器地址,端口号,
套接字类型
printf(\请输入服务器地址:\scanf(\
printf(\请输入端口号( >5000 ):\scanf(\if(i < 5000 || i > 65535)
printf(\不正确的端口号%d,用缺省端口号5001\\n\
a
..
else
port = i;
printf(\请输入套接字类型( 1,TCP; 2, UDP ):\scanf(\if(i == 1)
socket_type = SOCK_STREAM;//设定为SOCK_STREAM
else if(i == 2) else
printf(\不正确的输入%d,使用TCP数据流\\n\socket_type = SOCK_DGRAM;//设定为SOCK_DGRAM
//在windows环境下,需要先初始化协议栈
if ((retval = WSAStartup(0x202, &wsaData)) != 0) //WSAStartup函数调用,用来初始//socket
{
printf(\失败,错误号:%d\\n\
a
..
WSACleanup();//当调用了WSAStartup之后,就需要调用WSACleanup函数释放内存 return -1; }
//取得主机IP地址
if (isalpha(Buffer[0])) //是域名或命名地址,用首字母的是否在A-Z,或者a-z来判断是域名还是IP地址
hp = gethostbyname(Buffer);//从一个主机数据库中提取出主机信息 else
{
addr = inet_addr(Buffer);//是点分地址
hp = gethostbyaddr((char *)&addr,4,AF_INET);//根据网络地址,获得主机信息,执行成功,就返回一个指向主机信息的结构 }
if (hp == NULL )
a
..
{
printf(\不能解析地址[%s]: 错误号%d\\n\WSAGetLastError());//用于获取错误信息 WSACleanup(); exit(1); }
// 拷贝 解析的信息到sockaddr_in结构中
memset(&server,0,sizeof(server));//分配内存空间,由server返回 memcpy(&(server.sin_addr),hp->h_addr,hp->h_length);//信息的copy
server.sin_family = hp->h_addrtype;//组协议初始化 server.sin_port = htons(port);//端口号初始化
//建立套接字
conn_socket = socket(AF_INET,socket_type,0); if (conn_socket <0 )
a
{