
winsock.h是什么语言写的?C语言可以include使用吗?
展开全部
winsock.h是socket1.0 winsock2.h是socket2.0
socket本来就是在unix系统下为C语言开发的一种基于TCP的传输协议 winsock只不过是把它移到windows系统上来罢了 当然是兼容c的 你可以下载socket独立的库来使用C调用 也可以使用其它编译器提供的库来调用 就看兼容程度了
#include <stdio.h>
#include <WinSock.h>
#pragma comment(lib, "ws2_32.lib")
int main(int argc, char* argv[])
{
HOSTENT *host_entry;
char host_name[256];
int n;
struct WSAData wsadata;
int sock;
struct sockaddr_in srvaddr;
struct hostent *hp;
char data[1024];
char c;
int i = 0;
if(argc<3)
{
printf("Usage: %s ip port\n",argv[0]);
exit(1);
}
if(WSAStartup(0x0101,&wsadata)==0)
{
n = gethostname(host_name, 256);
host_entry=gethostbyname(host_name);
if(host_entry != NULL)
{
printf("%d.%d.%d.%d\n",
host_entry->h_addr_list[0][0]&0x00ff,
host_entry->h_addr_list[0][1]&0x00ff,
host_entry->h_addr_list[0][2]&0x00ff,
host_entry->h_addr_list[0][3]&0x00ff);
}
sock=socket(AF_INET,SOCK_STREAM,0);
if ( sock < 0 )
{
printf("socket create error.\n");
exit(1);
}
srvaddr.sin_family=AF_INET;
hp=gethostbyname(argv[1]);
if(hp==0)
{
printf("unknow host: %s\n",argv[1]);
exit(1);
}
memcpy((char*)&srvaddr.sin_addr,(char*)hp->h_addr,hp->h_length);
srvaddr.sin_port=htons((unsigned short)atoi(argv[2]));
if(connect(sock,(struct sockaddr*)&srvaddr,sizeof(srvaddr))<0)
{
printf("connect server error.\n");
exit(1);
}
while(1)
{
memset(data, 0, 1024);
i = 0;
c = getchar();
while ( c != 10 )
{
data[i++] = c;
c = getchar();
}
data[i] = '\0';
if ( send(sock, data, sizeof(data), 0) < 0 )
{
printf("send data error.\n");
exit(1);
}
if (recv(sock,data,1024,0) )
{
printf("----->%s\n",data);
}
if(strcmp(data, "bye")==0)
{
closesocket(sock);
printf("connecting close.\n");
WSACleanup();
exit(0);
}
}
}
WSACleanup();
return 0;
}
socket本来就是在unix系统下为C语言开发的一种基于TCP的传输协议 winsock只不过是把它移到windows系统上来罢了 当然是兼容c的 你可以下载socket独立的库来使用C调用 也可以使用其它编译器提供的库来调用 就看兼容程度了
#include <stdio.h>
#include <WinSock.h>
#pragma comment(lib, "ws2_32.lib")
int main(int argc, char* argv[])
{
HOSTENT *host_entry;
char host_name[256];
int n;
struct WSAData wsadata;
int sock;
struct sockaddr_in srvaddr;
struct hostent *hp;
char data[1024];
char c;
int i = 0;
if(argc<3)
{
printf("Usage: %s ip port\n",argv[0]);
exit(1);
}
if(WSAStartup(0x0101,&wsadata)==0)
{
n = gethostname(host_name, 256);
host_entry=gethostbyname(host_name);
if(host_entry != NULL)
{
printf("%d.%d.%d.%d\n",
host_entry->h_addr_list[0][0]&0x00ff,
host_entry->h_addr_list[0][1]&0x00ff,
host_entry->h_addr_list[0][2]&0x00ff,
host_entry->h_addr_list[0][3]&0x00ff);
}
sock=socket(AF_INET,SOCK_STREAM,0);
if ( sock < 0 )
{
printf("socket create error.\n");
exit(1);
}
srvaddr.sin_family=AF_INET;
hp=gethostbyname(argv[1]);
if(hp==0)
{
printf("unknow host: %s\n",argv[1]);
exit(1);
}
memcpy((char*)&srvaddr.sin_addr,(char*)hp->h_addr,hp->h_length);
srvaddr.sin_port=htons((unsigned short)atoi(argv[2]));
if(connect(sock,(struct sockaddr*)&srvaddr,sizeof(srvaddr))<0)
{
printf("connect server error.\n");
exit(1);
}
while(1)
{
memset(data, 0, 1024);
i = 0;
c = getchar();
while ( c != 10 )
{
data[i++] = c;
c = getchar();
}
data[i] = '\0';
if ( send(sock, data, sizeof(data), 0) < 0 )
{
printf("send data error.\n");
exit(1);
}
if (recv(sock,data,1024,0) )
{
printf("----->%s\n",data);
}
if(strcmp(data, "bye")==0)
{
closesocket(sock);
printf("connecting close.\n");
WSACleanup();
exit(0);
}
}
}
WSACleanup();
return 0;
}
追问
winsock2.h与winsock.h,什么关系呀?
追答
详见MSDNwinsock和winsock版本号不同 就像windowsXP和windows7一样
#include
#include
#include …………省略int main(int argc, char **argv)
{
WSADATA wsd;
SOCKET s;
char *sendbuf = NULL;
int ret,
i;
SOCKADDR_IN recipient;
ValidateArgs(argc, argv);
if (WSAStartup(MAKEWORD(2, 2), &wsd) != 0)
{
printf(“WSAStartup failed!\n”);
return 1;
}
s = socket(AF_INET, SOCK_DGRAM, 0);
if (s == INVALID_SOCKET)
{
printf(“socket() failed; %d\n", WSAGetLastError());
return 1;
}
recipient.sin_family = AF_INET;
recipient.sin_port = htons((short)iPort);
………………省略 closesocket(s)
GlobalFree(sendbuf);
WSACleanup();
return 0;
}
展开全部
是封装好的API,也就是只有函数的部首,实现方法应该是C和一些汇编的混合。另外可以使用#include<winsock.h>但是需要另外使用#pragma comment(lib,"ws2_32.lib")来链接win32 socket的静态链接库才能正常使用
追问
C语言可以用么?
追答
可以啊,首先是C++兼容99%的C语言啊,另外,其实Windows不是开源的啊,所有系统提供的API和系统调用一般都是由静态链接库和动态链接库提供的,也就是说是由.lib和.dll文件提供的,这些都是2进制文件,调用函数时候只要给出函数部首和调用约定还有参数以及接收返回值的变量就行了。另外.dll文件和.lib文件提供的函数,只要是2进制的,可以是任意编译式语言编写的都可以啊,比如你可以用delphi写一个函数,然后用.dll文件封装,然后用C++语言调用,这些都是没问题的。你看windows动态链接库编程就懂了啊,动态链接库其实是Window系统的一个核心之一。
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
winsock.h是windows C++ sdk的网络库的头文件
windows的C程序可以使用
windows的C程序可以使用
追问
C++ SDK,windows 下C语言咋可以用呀?
追答
可以,引用头文件,调用他的函数就可以了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询