首先我先学下基于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();
}