主题:[求助]windows socket编程
//---------------------------------------------------------------------------
#include <winsock.h>
#include <stdio.h>
#pragma hdrstop
#include <condefs.h>
//---------------------------------------------------------------------------
#pragma argsused
int main(int argc, char* argv[])
{
int sock,length;
struct sockaddr_in server;
int msgsock;
char buf[1024];
int rval;
WORD wVersionRequested;
WSADATA wsaData;
wVersionRequested=MAKEWORD(2,0);
int err=WSAStartup(wVersionRequested,&wsaData);
if(err==-1)
{
perror("WSAStartup");
exit(1);
}
sock=socket(AF_INET,SOCK_STREAM,0);
if (sock<0)
{
perror("Opening stream socket");
exit(1);
}
server.sin_family=AF_INET;
server.sin_port=htons(3223);
server.sin_addr.s_addr=INADDR_ANY;
if(bind(sock,(const struct sockaddr *)&server,sizeof(server))<0)
{
perror("binding stream socket");
exit(1);
}
length=sizeof(server);
if(getsockname(sock,(struct sockaddr*)&server,&length)<0)
{
perror("GETING socket name");
exit(1);
}
printf("socket port #%d\n",ntohs(server.sin_port));
listen(sock,5);
do
{
msgsock=accept(sock,(struct socketaddr*) 0,(int *) 0);
printf("client connected successful.\n");
if(msgsock==-1)
perror("accept");
else
do
{
memset(buf,0,sizeof(buf));
rval=recv(msgsock,buf,1024,0);
printf("rval=%d\n",rval);
if (rval<0)
{
if(rval==WSAEINPROGRESS)
printf("Hello1\n");
if(rval==WSAENETRESET)
printf("Hello2\n");
if(rval==WSAENOTSOCK)
printf("Hello3\n");
if(rval==WSAEOPNOTSUPP)
printf("Hello4\n");
perror("reading stream message");
getchar();
exit(1);
}
else if(rval==0)
printf("ending connetion\n");
else
printf("---->%s\n",buf);
}while(rval!=0);
closesocket(msgsock);
}while(true);
WSACleanup();
return 0;
}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
#include <winsock.h>
#include <stdio.h>
#pragma hdrstop
#include <condefs.h>
//---------------------------------------------------------------------------
#pragma argsused
int main(int argc, char* argv[])
{
WORD wVersionRequested;
WSADATA wsaData;
wVersionRequested=MAKEWORD(2,0);
int err=WSAStartup(wVersionRequested,&wsaData);
if(err==-1)
{
perror("WSAStartup");
exit(1);
}
int sock,length,msgsock;
struct sockaddr_in server;
char buf[]="THIS IS A TEST.";
sock=socket(AF_INET,SOCK_STREAM,0);
if(sock<0)
{
perror("Opening stream socket ");
exit(1);
}
server.sin_family=AF_INET;
server.sin_port=htons(3223);
server.sin_addr.s_addr=inet_addr("172.28.24.173");
msgsock=connect(sock,(struct sockaddr*)&server,sizeof(server));
length=sizeof(buf);
int rval=send(sock,buf,length,0);
if(rval!=length)
{
perror("Sending stream error");
getchar();
exit(1);
}
closesocket(msgsock);
WSACleanup();
return 0;
}
//---------------------------------------------------------------------------
这是用winsock传输数据的一个简单程序。
我现在想从客户端发送一个数据包到服务器端,再从服务器端(对接收到的数据处理后--处理我自己会做)返回一个数据包到客户端要做什么修改。
#include <winsock.h>
#include <stdio.h>
#pragma hdrstop
#include <condefs.h>
//---------------------------------------------------------------------------
#pragma argsused
int main(int argc, char* argv[])
{
int sock,length;
struct sockaddr_in server;
int msgsock;
char buf[1024];
int rval;
WORD wVersionRequested;
WSADATA wsaData;
wVersionRequested=MAKEWORD(2,0);
int err=WSAStartup(wVersionRequested,&wsaData);
if(err==-1)
{
perror("WSAStartup");
exit(1);
}
sock=socket(AF_INET,SOCK_STREAM,0);
if (sock<0)
{
perror("Opening stream socket");
exit(1);
}
server.sin_family=AF_INET;
server.sin_port=htons(3223);
server.sin_addr.s_addr=INADDR_ANY;
if(bind(sock,(const struct sockaddr *)&server,sizeof(server))<0)
{
perror("binding stream socket");
exit(1);
}
length=sizeof(server);
if(getsockname(sock,(struct sockaddr*)&server,&length)<0)
{
perror("GETING socket name");
exit(1);
}
printf("socket port #%d\n",ntohs(server.sin_port));
listen(sock,5);
do
{
msgsock=accept(sock,(struct socketaddr*) 0,(int *) 0);
printf("client connected successful.\n");
if(msgsock==-1)
perror("accept");
else
do
{
memset(buf,0,sizeof(buf));
rval=recv(msgsock,buf,1024,0);
printf("rval=%d\n",rval);
if (rval<0)
{
if(rval==WSAEINPROGRESS)
printf("Hello1\n");
if(rval==WSAENETRESET)
printf("Hello2\n");
if(rval==WSAENOTSOCK)
printf("Hello3\n");
if(rval==WSAEOPNOTSUPP)
printf("Hello4\n");
perror("reading stream message");
getchar();
exit(1);
}
else if(rval==0)
printf("ending connetion\n");
else
printf("---->%s\n",buf);
}while(rval!=0);
closesocket(msgsock);
}while(true);
WSACleanup();
return 0;
}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
#include <winsock.h>
#include <stdio.h>
#pragma hdrstop
#include <condefs.h>
//---------------------------------------------------------------------------
#pragma argsused
int main(int argc, char* argv[])
{
WORD wVersionRequested;
WSADATA wsaData;
wVersionRequested=MAKEWORD(2,0);
int err=WSAStartup(wVersionRequested,&wsaData);
if(err==-1)
{
perror("WSAStartup");
exit(1);
}
int sock,length,msgsock;
struct sockaddr_in server;
char buf[]="THIS IS A TEST.";
sock=socket(AF_INET,SOCK_STREAM,0);
if(sock<0)
{
perror("Opening stream socket ");
exit(1);
}
server.sin_family=AF_INET;
server.sin_port=htons(3223);
server.sin_addr.s_addr=inet_addr("172.28.24.173");
msgsock=connect(sock,(struct sockaddr*)&server,sizeof(server));
length=sizeof(buf);
int rval=send(sock,buf,length,0);
if(rval!=length)
{
perror("Sending stream error");
getchar();
exit(1);
}
closesocket(msgsock);
WSACleanup();
return 0;
}
//---------------------------------------------------------------------------
这是用winsock传输数据的一个简单程序。
我现在想从客户端发送一个数据包到服务器端,再从服务器端(对接收到的数据处理后--处理我自己会做)返回一个数据包到客户端要做什么修改。