今天写了第一个网络的程序,主要使用的socket原理。。。
首先我先学下基于tcp/ip协议的socket程序。。。
要实现通信,首先必须先建立一台服务器,步骤如下:
1.用WSASTARTUP启动socket库
2.建立一个socket
3.用bind函数把本地地址和端口绑定起来
4.用listen函数使socket能够监听来自客户的请求
5.用accept函数来接受客户发来的请求,同时可以得到客户的ip和端口信息,方便后面的通信
6.接下来就可以用send和recv函数来和客户通信。。。。
接下来是客户机程序的编写,这个相对来说比较简单。。。
1.也是建立一个socket
2.不用进行绑定和监听操作,直接和服务器进行连接,用函数connect实现
3.接下来就可以用send和recv和服务器之间实现通信了
以前就是一个简单的网络编程,很容易实现吧。。。下面是这个程序的源代码。。。
服务器程序
:#include<winsock2.h> #include<stdio.h> void main() { WORD wVersionRequested; WSADATA wsaData; int err; wVersionRequested = MAKEWORD( 1, 1); err = WSAStartup( wVersionRequested, &wsaData ); if ( err != 0 ) { return ; } if ( LOBYTE( wsaData.wVersion ) != 1 || HIBYTE( wsaData.wVersion ) != 1 ) { WSACleanup( ); return ; } SOCKET fuwuqi=socket(AF_INET,SOCK_STREAM,0); sockaddr_in a; a.sin_addr.S_un.S_addr=htonl(INADDR_ANY); a.sin_family=AF_INET; a.sin_port=htons(6000); bind(fuwuqi,(sockaddr*)&a,sizeof(sockaddr)); listen(fuwuqi,2); sockaddr_in b; int n=sizeof(sockaddr); while(1) { SOCKET kefu=accept(fuwuqi,(sockaddr*)&b,&n); send(kefu,"hello",strlen("hello")+1,0); char jieshou[100]; recv(kefu,jieshou,100,0); printf("%s/n",jieshou); closesocket(kefu); } }
客户机:
#include<winsock2.h> #include<stdio.h> void main() { WORD wVersionRequested; WSADATA wsaData; int err; wVersionRequested = MAKEWORD( 1, 1); err = WSAStartup( wVersionRequested, &wsaData ); if ( err != 0 ) { return ; } if ( LOBYTE( wsaData.wVersion ) != 1 || HIBYTE( wsaData.wVersion ) != 1 ) { WSACleanup( ); return ; } SOCKET kefu=socket(AF_INET,SOCK_STREAM,0); sockaddr_in a; a.sin_addr.S_un.S_addr=inet_addr("127.0.0.1"); a.sin_family=AF_INET; a.sin_port=htons(6000); connect(kefu,(sockaddr*)&a,sizeof(sockaddr)); char jieshou[100]; recv(kefu,jieshou,100,0); printf("%s",jieshou); send(kefu,"this is shizhan",strlen("this is shizhan")+1,0); closesocket(kefu); WSACleanup(); }