C++网络编程
995 浏览 6 years, 2 months
2.2 因特网客户端1
版权声明: 转载请注明出处 http://www.codingsoho.com/本例会想服务器发送数据,因此服务器可以显示这些数据。
头文件和跨平台接口定义跟服务器端一样,所以不再叙述了。
用户输入服务器连接地址
cout << "Enter the IP address to connect to: ";
cin >> ip;
// convert the IP address.
ipaddr = inet_addr( ip );
if( ipaddr == -1 )
{
cout << "Error: invalid IP address" << endl;
return 0;
}
- inet_addr将字符串地址ip转换为以网络字节序表示的IP地址ipaddr
cout <<
引导用户输入内容
创建套接字
// create a socket
int sock = socket( AF_INET, SOCK_STREAM, IPPROTO_TCP );
// check if socket was created
if( sock == -1 )
{
cout << "Socket creation error!" << endl;
return 0;
}
cout << "Socket created!" << endl;
连接方式使用TCP
连接到服务器
// create a sockaddr_in for connection, on port 4000
struct sockaddr_in socketaddress;
socklen_t sa_size = sizeof( struct sockaddr_in );
socketaddress.sin_family = AF_INET;
socketaddress.sin_port = htons( 4000 );
socketaddress.sin_addr.s_addr = ipaddr;
memset( &(socketaddress.sin_zero), 0, 8 );
// connect the socket
err = connect( sock, (struct sockaddr*)&socketaddress, sa_size );
if( err == -1 )
{
cout << "Socket connection error!" << endl;
return 0;
}
cout << "Socket connected!" << endl;
填充一个数据结构sockaddr,该数据结构为服务器端信息,将创建好的套接字连接到服务器
发送数据
cout << "sending message: " << message << "..." << endl;
// send data
err = send( sock, message, strlen( message ) + 1, 0 );
if( err == -1 )
{
cout << "Socket sending error!" << endl;
return 0;
}
cout << "Data Sent!" << endl;
这段代码比较简单,通过套接字发送消息
停止套接字
shutdown( sock, 2 );
CloseSocket( sock );
CloseSocketLib;
最后,跟服务器端一样,停止套接字。