TCP流式套接字的基本编程
来源:互联网 发布:电脑便签软件 编辑:程序博客网 时间:2024/06/08 00:08
面向连接的客户/服务器程序工作模型
服务器端程序
#include < WINSOCK2.H>
#pragma comment( lib, "ws2_32" )
#include < stdio.h>
int main()
{
printf( " -------------------------/n| 服务器端 |/n|-------------------------/n" );
//--------------①加载动态链接库Winsock DLL-------------------
WORD wVersionRequested= MAKEWORD( 2 ,2 );
WSADATA wsaData;
if ( WSAStartup( wVersionRequested,& wsaData)!= 0 )
{
printf( "WSAStartup Failed/n" );
printf( "WSAStartup Error=%d/n" , WSAGetLastError());
}
else
{
printf( "加载Winsock库成功 /n" );
printf( "调用者希望使用的Winsock版本号=%x/n" , wsaData.wVersion);
printf( "加载的Winsock库所支持的最高Winsock版本号=%x/n" , wsaData.wHighVersion);
printf( "wWinsock库的说明字符串=%s/n" ,& wsaData.szDescription[ 0 ]);
printf( "系统状态或配置信息的说明字符串=%s/n" ,& wsaData.szSystemStatus[ 0 ]);
}
//---------------②创建用于监听的流式套接口s---------------
SOCKET s= socket( AF_INET, SOCK_STREAM, IPPROTO_TCP);
if ( s== INVALID_SOCKET)
{
printf( "|Failed socket/n" );
printf( "|socket Error=%d/n" , WSAGetLastError());
}
else
printf( "已创建用于监听的套接口,套接口号:[%u]/n" , s);
//---------------③绑定,使用bind()----------------------
struct sockaddr_in Sadd;
Sadd.sin_family= AF_INET;
Sadd.sin_port= htons( 5555 );
Sadd.sin_addr.S_un.S_addr= inet_addr( "192.168.16.1" );
if ( bind( s,( sockaddr*)& Sadd, sizeof ( Sadd))== SOCKET_ERROR)
{
printf( "Failed bind()/n" );
printf( "bind Error=%d/n" , WSAGetLastError());
}
else
{
printf( "绑定成功/n" );
printf( "本地IP地址:[%s],本地端口号:[%u]/n" , inet_ntoa( Sadd.sin_addr), ntohs( Sadd.sin_port));
}
//---------------④监听状态-------------
if ( listen( s, 2 )== SOCKET_ERROR)
{
printf( "Failed listen()/n" );
printf( "listen Error=%d/n" , WSAGetLastError());
}
//----------------⑤循环接受客户的连接请求---------------------------
struct sockaddr_in Cadd;
int caddLen= sizeof ( Cadd);
SOCKET c;
while ( TRUE )
{
printf( "|----------------------------/n" );
printf( "|进入监听状态...../n|--------------------------------|/n" );
c= accept( s,( sockaddr*)& Cadd,& caddLen);
if ( c== INVALID_SOCKET)
{
printf( "|Failed accept()/n" );
printf( "|accept Error=%d/n" , WSAGetLastError());
}
else
printf( "|可以在套接口[%u]上发送接收数据了!/n" , c);
//#########################开始发送、接收###################### 注意都要在新套接口c上进行
//#########################结束发送、接收######################
closesocket( c);
printf( "|与主机IP地址是:[%s]/n|端口号是:[%u]的连接完毕/n" , inet_ntoa( Cadd.sin_addr), ntohs( Cadd.sin_port));
char xx;
printf( "|-------------------------------------/n需要退出吗?(Y/N)" );
scanf( "%c" ,& xx);
if ( xx== 'Y' || xx== 'y' )
{
break ;
}
}
closesocket( s);
WSACleanup();
return 0 ;
}
#pragma comment( lib, "ws2_32" )
#include < stdio.h>
int main()
{
printf( " -------------------------/n| 服务器端 |/n|-------------------------/n" );
//--------------①加载动态链接库Winsock DLL-------------------
WORD wVersionRequested= MAKEWORD( 2 ,2 );
WSADATA wsaData;
if ( WSAStartup( wVersionRequested,& wsaData)!= 0 )
{
printf( "WSAStartup Failed/n" );
printf( "WSAStartup Error=%d/n" , WSAGetLastError());
}
else
{
printf( "加载Winsock库成功 /n" );
printf( "调用者希望使用的Winsock版本号=%x/n" , wsaData.wVersion);
printf( "加载的Winsock库所支持的最高Winsock版本号=%x/n" , wsaData.wHighVersion);
printf( "wWinsock库的说明字符串=%s/n" ,& wsaData.szDescription[ 0 ]);
printf( "系统状态或配置信息的说明字符串=%s/n" ,& wsaData.szSystemStatus[ 0 ]);
}
//---------------②创建用于监听的流式套接口s---------------
SOCKET s= socket( AF_INET, SOCK_STREAM, IPPROTO_TCP);
if ( s== INVALID_SOCKET)
{
printf( "|Failed socket/n" );
printf( "|socket Error=%d/n" , WSAGetLastError());
}
else
printf( "已创建用于监听的套接口,套接口号:[%u]/n" , s);
//---------------③绑定,使用bind()----------------------
struct sockaddr_in Sadd;
Sadd.sin_family= AF_INET;
Sadd.sin_port= htons( 5555 );
Sadd.sin_addr.S_un.S_addr= inet_addr( "192.168.16.1" );
if ( bind( s,( sockaddr*)& Sadd, sizeof ( Sadd))== SOCKET_ERROR)
{
printf( "Failed bind()/n" );
printf( "bind Error=%d/n" , WSAGetLastError());
}
else
{
printf( "绑定成功/n" );
printf( "本地IP地址:[%s],本地端口号:[%u]/n" , inet_ntoa( Sadd.sin_addr), ntohs( Sadd.sin_port));
}
//---------------④监听状态-------------
if ( listen( s, 2 )== SOCKET_ERROR)
{
printf( "Failed listen()/n" );
printf( "listen Error=%d/n" , WSAGetLastError());
}
//----------------⑤循环接受客户的连接请求---------------------------
struct sockaddr_in Cadd;
int caddLen= sizeof ( Cadd);
SOCKET c;
while ( TRUE )
{
printf( "|----------------------------/n" );
printf( "|进入监听状态...../n|--------------------------------|/n" );
c= accept( s,( sockaddr*)& Cadd,& caddLen);
if ( c== INVALID_SOCKET)
{
printf( "|Failed accept()/n" );
printf( "|accept Error=%d/n" , WSAGetLastError());
}
else
printf( "|可以在套接口[%u]上发送接收数据了!/n" , c);
//#########################开始发送、接收###################### 注意都要在新套接口c上进行
//#########################结束发送、接收######################
closesocket( c);
printf( "|与主机IP地址是:[%s]/n|端口号是:[%u]的连接完毕/n" , inet_ntoa( Cadd.sin_addr), ntohs( Cadd.sin_port));
char xx;
printf( "|-------------------------------------/n需要退出吗?(Y/N)" );
scanf( "%c" ,& xx);
if ( xx== 'Y' || xx== 'y' )
{
break ;
}
}
closesocket( s);
WSACleanup();
return 0 ;
}
客户端程序
#include < WINSOCK2.H>
#pragma comment( lib, "WS2_32" )
#include < stdio.h>
int main()
{
printf( "------------------------/n| 客户端 |/n|---------------------------------------/n" );
//------①加载动态链接库winsock DLL-----------
printf( "|加载等待中.... " );
WSADATA wsaData;
WORD wVersionRequested= MAKEWORD( 2 ,2 );
if ( WSAStartup( wVersionRequested,& wsaData)!= 0 )
{
printf( "|WSAStartup Failed/n" );
printf( "|WSAStartup Error=%d/n" , WSAGetLastError());
}
else
{
printf( "加载Winsock 库成功 |/n" );
}
printf( "|---------------------------------------/n" );
//-------②创建用于监听的流式套接口s,使用socket()-----------------
SOCKET s= socket( AF_INET, SOCK_STREAM, IPPROTO_TCP);
if ( s== INVALID_SOCKET)
{
printf( "|Failed socket/n" );
printf( "|socket Error=%d/n" , WSAGetLastError());
}
else
printf( "|已创建用于监听的套接口,套接口号:[%u]/n" , s);
printf( "|---------------------------------------/n" );
//------③本地地址bind(可以不做这部分,如果不绑定,系统将自动分配)--------
/*struct sockaddr_in Cadd;
Cadd.sin_family=AF_INET;
Cadd.sin_port=htons(4444);
Cadd.sin_addr.S_un.S_addr=htonl(INADDR_ANY);
if (bind(s,(sockaddr*)&Cadd,sizeof(Cadd))==SOCKET_ERROR)
{
printf("|Failed bind()/n");
}*/
//-------填写要连接的服务器地址信息---------
struct sockaddr_in Sadd;
Sadd.sin_family= AF_INET;
Sadd.sin_port= htons( 5555 );
Sadd.sin_addr.S_un.S_addr= inet_addr( "192.168.16.1" );
//--------④将套接口s与远程主机相连--------------
if ( connect( s,( sockaddr*)& Sadd, sizeof ( Sadd))== INVALID_SOCKET)
{
printf( "|Failed connect()/n" );
printf( "|connect Error=%d/n" , WSAGetLastError());
}
else
{
//####################开始发接数据########################
printf( "|连接成功,可以开始发送接收数据了!/n" );
printf( "|服务器IP地址:[%s]/n 端口号:[%u]/n" , inet_ntoa( Sadd.sin_addr), ntohs( Sadd.sin_port));
//####################结束发接数据########################
}
//--------------⑤关闭套接字s,终止对动态链接库的访问----------
closesocket( s);
printf( "|---------------------------------------/n" );
printf( "|连接完毕/n" );
WSACleanup();
return 0 ;
}
#pragma comment( lib, "WS2_32" )
#include < stdio.h>
int main()
{
printf( "------------------------/n| 客户端 |/n|---------------------------------------/n" );
//------①加载动态链接库winsock DLL-----------
printf( "|加载等待中.... " );
WSADATA wsaData;
WORD wVersionRequested= MAKEWORD( 2 ,2 );
if ( WSAStartup( wVersionRequested,& wsaData)!= 0 )
{
printf( "|WSAStartup Failed/n" );
printf( "|WSAStartup Error=%d/n" , WSAGetLastError());
}
else
{
printf( "加载Winsock 库成功 |/n" );
}
printf( "|---------------------------------------/n" );
//-------②创建用于监听的流式套接口s,使用socket()-----------------
SOCKET s= socket( AF_INET, SOCK_STREAM, IPPROTO_TCP);
if ( s== INVALID_SOCKET)
{
printf( "|Failed socket/n" );
printf( "|socket Error=%d/n" , WSAGetLastError());
}
else
printf( "|已创建用于监听的套接口,套接口号:[%u]/n" , s);
printf( "|---------------------------------------/n" );
//------③本地地址bind(可以不做这部分,如果不绑定,系统将自动分配)--------
/*struct sockaddr_in Cadd;
Cadd.sin_family=AF_INET;
Cadd.sin_port=htons(4444);
Cadd.sin_addr.S_un.S_addr=htonl(INADDR_ANY);
if (bind(s,(sockaddr*)&Cadd,sizeof(Cadd))==SOCKET_ERROR)
{
printf("|Failed bind()/n");
}*/
//-------填写要连接的服务器地址信息---------
struct sockaddr_in Sadd;
Sadd.sin_family= AF_INET;
Sadd.sin_port= htons( 5555 );
Sadd.sin_addr.S_un.S_addr= inet_addr( "192.168.16.1" );
//--------④将套接口s与远程主机相连--------------
if ( connect( s,( sockaddr*)& Sadd, sizeof ( Sadd))== INVALID_SOCKET)
{
printf( "|Failed connect()/n" );
printf( "|connect Error=%d/n" , WSAGetLastError());
}
else
{
//####################开始发接数据########################
printf( "|连接成功,可以开始发送接收数据了!/n" );
printf( "|服务器IP地址:[%s]/n 端口号:[%u]/n" , inet_ntoa( Sadd.sin_addr), ntohs( Sadd.sin_port));
//####################结束发接数据########################
}
//--------------⑤关闭套接字s,终止对动态链接库的访问----------
closesocket( s);
printf( "|---------------------------------------/n" );
printf( "|连接完毕/n" );
WSACleanup();
return 0 ;
}
- TCP流式套接字的基本编程
- TCP流式套接字的基本编程
- 基本的TCP套接字编程
- 基本TCP套接字编程
- 基本tcp套接字编程
- 基本TCP套接字编程
- 基本TCP套接字编程
- 基本TCP套接字编程
- 基本TCP套接字编程
- 基本TCP套接字编程
- 基本TCP套接字编程
- TCP基本套接字编程
- 基本TCP套接字编程
- 基本TCP套接字编程
- 基本TCP套接字编程
- 《网络编程》基本 TCP 套接字编程
- 基本TCP套接字编程的一些函数详解
- 4 基本TCP套接字编程
- DFS 对一系列给定数据 进行深度优先遍历 获得54321的所有可能组合
- win7 OrCAD Capture 找不到MSVCR90.dll
- Linux网络安装介绍1
- Win7 线程语言设置错误可能引起窗口排版变化
- 0630学习笔记
- TCP流式套接字的基本编程
- 使用POI读取excel文件内容
- Ural-1025. Democracy in Danger(水题)
- Select at least one project解决办法
- C#中Application.StartupPath和System.Environment.CurrentDirectory的区别
- TCP流式套接字的阻塞模式编程
- Powershell 执行报错,提示到处数据超过了资料允许最大值的处理方式!
- [设计模式]设计模式综述
- fileupload上传文件