论坛: 编程破解 标题: 谁能告诉我如何用VB调用WINSOCK--API函数编写TCP/UCP的程序啊 复制本贴地址    
作者: lxlmf [boadi]    论坛用户   登录
在VC可以的,不知道VB是否可行的通

[此贴被 lxlmf(boadi) 在 02月09日11时01分 编辑过]

地主 发表时间: 04-02-09 11:00

回复: leonshoh [leonshoh]   论坛用户   登录
VB当然也可以了~
可以先声明API再使用~
不过最简单的是使用Winsock控件

B1层 发表时间: 04-02-11 13:03

回复: bcliangzi [bcliangzi]   论坛用户   登录
是呀,WINSOCK本身就是一个强大的TCP/IP之类的网络通讯控件了,还用得着那么麻烦去调用声明API函数吗?


B2层 发表时间: 04-02-15 15:56

回复: TomyChen [quest]   版主   登录
代码:

//Filename: TestUDPSocket.cpp
//Author:Smoke
//Mail:smoke@tomydan.net
//Last:2003-12
//Description:
//This is program show a UDP Server and a UDP client alternating...
//it very simple :)
//Usage:Start server
//TestSocket.exe server [starting server mode]
//TestSocket.exe client "Message for send to server!" [client mode]
//Compile in VC 6.0
//////////////////////////////////////////////////////////////////////////
//Header file
//////////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include <winsock2.h>
#pragma comment(lib,"Ws2_32.lib") //load lib
#define BUFSZIE 1024
BOOL CreateServer();
int DoClient(char* sendbuf);
int main(int argc, char* argv[])
{
//Create socket in win system need call "WSAStartup" first.more message see MSDN
WORD wVersionRequested;
WSADATA wsaData;
int err;
wVersionRequested = MAKEWORD( 2, 2 );
err = WSAStartup( wVersionRequested, &wsaData );
if ( err != 0 )
{
return 0;
}

if(argc == 2)//if argc == 2 Start server...
{
if(strcmp(argv[1],"server") != 0)
return 0;
CreateServer();//Start server here
}
if(argc == 3)
{
if(strcmp(argv[1], "client") !=0)
return 0;
DoClient(argv[2]);
}
else
{
printf("Start error!\n");
return 0;
}
WSACleanup();
return 0;
}

//Function Description:
//This function create a server socket first then bind socket and recvfrom...
BOOL CreateServer()
{
SOCKETsockfd;
structsockaddr_in servaddr;
charbuffer[BUFSZIE];
sockfd = socket(AF_INET,SOCK_DGRAM,0);
if(sockfd < 0)
{
printf("Create server socket error!\n");
return FALSE;
}
servaddr.sin_family = AF_INET;
servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
servaddr.sin_port = htons(60000);//bind port
if(bind(sockfd,(struct sockaddr*)&servaddr,sizeof(servaddr)) < 0)
{
printf("Bind error in socket!\n");
return FALSE;
}
listen(sockfd,10);
printf("Starting server OK!\nRecving...\n");
int iLen = sizeof(struct sockaddr_in);
while(1)
{
memset(buffer,0,sizeof(buffer));
int RecvBytes = recvfrom(sockfd,buffer,BUFSZIE,0,
(struct sockaddr*)&servaddr,&iLen);//recvform
if(RecvBytes <= 0)
printf("Recv error!\n");
printf("Recv:%s\n",buffer);
if(strcmp(buffer,"QUIT") == 0)
break;
}
printf("Quit Server...\n");
return TRUE;
}

//Function Description:
//This function get "sendbuf" and sendto server...
int DoClient(char* sendbuf)
{
SOCKET sockfd;
struct sockaddr_in clientaddr;
sockfd = socket(AF_INET,SOCK_DGRAM,0);
if(sockfd < 0)
{
printf("Socket client socket error!\n");
return 0;
}
clientaddr.sin_family = AF_INET;
clientaddr.sin_addr.s_addr = inet_addr("192.168.1.13");//connection ipaddress
clientaddr.sin_port = htons(60000);
if(NULL == sendbuf)
{
printf("input some you want to send to server!\n");
return 0;
}
int iSend = sendto(sockfd,sendbuf,strlen(sendbuf),0,(struct sockaddr*)&clientaddr,sizeof(clientaddr));
if(iSend < 0)
{
printf("Send error!\n");
return 0;
}
printf("Send %s OK!\n",sendbuf);
return 0;
}



B3层 发表时间: 04-02-15 21:29

回复: TomyChen [quest]   版主   登录
代码:

//Filename: TestSocketTCP.cpp
//Author:smoke
//mail:smoke@tomydan.net
//last:2003-12
//description:
//this is program show a TCP server and a TCP client alternating...
//it very simple :)
//usage:
//testsockettcp.exe server [starting server mode]
//testsockettcp.exe client "message for send to server!" [client mode]
//compile in vc 6.0


//////////////////////////////////////////////////////////////////////////
//    header file
//////////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include <winsock2.h>
#pragma comment(lib,"ws2_32.lib")
#define BUFSIZE 1024
#define PORT60001
BOOL CreateTcpServer(int port);
int DoClient(char* sendmsg);
int main(int argc, char* argv[])
{
WORD wVersionRequested;
WSADATA wsaData;
int err;
wVersionRequested = MAKEWORD( 2, 2 );
err = WSAStartup( wVersionRequested, &wsaData );
if ( err != 0 )
{
return FALSE;
}
if(argc < 2)
return 0;
if(argc == 2)
{
if(strcmp(argv[1],"server") != 0)
return 0;
CreateTcpServer(PORT);
}
if(argc == 3)
{
if(strcmp(argv[1],"client") !=0)
return 0;
DoClient(argv[2]);
}
else
{
printf("Input error!\n");
}
WSACleanup();
return 0;
}

//Function Description:
//Create the tcp server to recv the client...
//In tcp recv the data-buffer will accpet first, it different form UDP.
//Get the more message form about socket or MSDN
BOOL CreateTcpServer(int port)
{
SOCKET sockfd,mAppept;
struct sockaddr_in servaddr;
struct sockaddr_in clieaddr;
sockfd = socket(AF_INET,SOCK_STREAM,0);
if(sockfd < 0)
{
printf("Create server socket error!\n");
return FALSE;
}
memset(&servaddr,0,sizeof(sockaddr_in));
servaddr.sin_family = AF_INET;
servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
servaddr.sin_port = htons(port);
if(bind(sockfd,(struct sockaddr*)&servaddr,sizeof(servaddr)) < 0)
{
printf("Bind error in socket!\n");
return FALSE;
}
listen(sockfd,10);
int iLen = sizeof(sockaddr_in);
printf("Starting server OK!\nRecving...\n");
while (1)
{
mAppept = accept(sockfd,(struct sockaddr*)&clieaddr,&iLen);
if(mAppept != INVALID_SOCKET )
{
char buffer[BUFSIZE];
memset(buffer,0,sizeof(buffer));
int iRecv = recv(mAppept,buffer,BUFSIZE,0);
if(iRecv <= 0)
printf("Recv error!\n");
printf("recv: %s \n",buffer);
if(strcmp(buffer,"QUIT") == 0)
break;
}
}
printf("Quit Server...\n");
return TRUE;
}


//Function Description:
//In tcp send data-buffer will connect to the server first,it different form udp
//Get the more message form about socket or MSDN
int DoClient(char* sendmsg)
{
SOCKET sockfd;
struct sockaddr_in clientaddr;
int iRes;

sockfd = socket(AF_INET,SOCK_STREAM,0);
if(sockfd < 0)
{
printf("Create client socket error!\n");
return 0;
}
clientaddr.sin_family = AF_INET;
clientaddr.sin_addr.s_addr = inet_addr("192.168.1.13");
clientaddr.sin_port = htons(PORT);
iRes = connect(sockfd,(struct sockaddr*)&clientaddr,sizeof(clientaddr));
if(iRes < 0)
{
printf("Can not create connection!\n");
return 0;
}
iRes = send(sockfd,sendmsg,strlen(sendmsg),0);
if(iRes <= 0)
{
printf("Send error!\n");
return 0;
}
printf("Send '%s' OK!\n",sendmsg);
return 0;
}



B4层 发表时间: 04-02-15 21:30

回复: bcliangzi [bcliangzi]   论坛用户   登录
高手!

B5层 发表时间: 04-02-16 13:29

回复: lxlmf [boadi]   论坛用户   登录
感谢大家回答我的问题???????/

B6层 发表时间: 04-02-17 21:31

回复: leonshoh [leonshoh]   论坛用户   登录
写的是block型的,没多大意义,不能同时处理接受和发送~~~~
用多线程可以,最好用端口模型,可以处理大量连接

B7层 发表时间: 04-02-18 13:59

论坛: 编程破解

20CN网络安全小组版权所有
Copyright © 2000-2010 20CN Security Group. All Rights Reserved.
论坛程序编写:NetDemon

粤ICP备05087286号