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(argc3)
{
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;
}
一个c语言的winsock程序
你没有接受IE发送的返回信息。我加了两条语句就好了。
.上面程序不变
char mybuf[200];
while(1)
{
x++;
SOCKET acc_socket;
acc_socket=accept(server_socket, (struct sockaddr *)user_socket, sock_size);
char FAR *buf=”HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\nHello World!”;
int n=send(acc_socket,buf,strlen(buf),0);
recv(acc_socket,mybuf,200,0);
if(n!=-1){
printf(“\n+——————————————————————“);
printf(“\n+ n:%d\n+ buf:\n%s\n+ loop:%d\n+ acc:%d”,n,buf,x,acc_socket);
}
c语言winsock的问题
server.c服务器端
/*
* Client.c
*
* Created on: 2009/04/17
* Author: gas
*/
#include stdio.h
#include stdlib.h
#include sys/types.h
#include Winsock.h
//#include Winsock2.h
#include errno.h
#define LOCALHOST “127.0.0.1”
#define PORT_NO 1234
static SOCKET s_sock;
static int sock_size;
int main( int argc, char *argv[] ){
WSADATA wsadata;
struct sockaddr_in server_addr;
struct sockaddr_in user_addr;
char tmp[256];
char buf[256];
struct hostent *shost;
memset(server_addr, 0x00, sizeof(server_addr));
memset(user_addr, 0x00, sizeof(user_addr));
memset(tmp, 0x00, sizeof(tmp));
memset(buf, 0x00, sizeof(buf));
shost = gethostbyname( argv[1] ) ;
if(argc 3)
{
//printf(“Client serverip port\n”);
}
server_addr.sin_family = AF_INET;
server_addr.sin_addr.s_addr = inet_addr(LOCALHOST); //INADDR_ANY;
server_addr.sin_port = PORT_NO;
if(WSAStartup(MAKEWORD(1,1), wsadata) != 0)
{
printf(“WSAStartup failed.\n”);
getchar();
exit(0);
}
s_sock = socket(AF_INET, SOCK_STREAM, 0);
if(s_sock==-1)
{
printf(“Create Server Socket Error.\n”);
getchar();
exit(0);
}
if(bind(s_sock, (struct sockaddr *)server_addr, sizeof(server_addr)) == SOCKET_ERROR)
{
printf(“bind error.Press Any Key To Exit.\n”);
getchar();
exit(0);
}
if(listen(s_sock,5) == SOCKET_ERROR)
{
printf(“listen error.Press Any Key To Exit.\n”);
getchar();
exit(0);
}
printf(“server_addr:%d %d %d\n”,server_addr.sin_family,server_addr.sin_port,server_addr.sin_addr.s_addr);
while(1)
{
SOCKET acc_socket;
acc_socket = accept(s_sock, (struct sockaddr *)user_addr, sock_size);
printf(“user_addr:%d %d %d\n”,user_addr.sin_family,user_addr.sin_port,user_addr.sin_addr.s_addr);
if(acc_socket == INVALID_SOCKET)
{
printf(“acc_socket error \n”);
printf(“server_addr:%d %d %d\n”,server_addr.sin_family,server_addr.sin_port,server_addr.sin_addr.s_addr);
break;
//continue;
}
printf(“Input Message:”);
scanf(“%s”,tmp);
if(strncmp(tmp,”exit”,4) == 0)
{
printf(“exit\n”);
break;
}else
{
printf(“send\n”);
}
int n = send(s_sock,tmp,strlen(tmp),0);
recv(acc_socket, buf, sizeof(buf), 0);
printf(“RMessage : %s\n”,buf);
if(n == -1)
{
printf(“send Server Socket Error. %s\n”,tmp);
getchar();
exit(0);
}
}
closesocket(s_sock);
WSACleanup();
return EXIT_SUCCESS;
}
现在有以下问题
想实现客户端发个信息,服务器端接受,然后再返个消息给客户端
现在
1 服务器端不启动,客户端报connect错误,服务器端启动,客户端报bind错误,为什么呢(注 客户端注释掉bind代码,也会出现connect error)?
2 服务器端一运行到accept的时候,总是返回错误。
各位高手多多帮忙,谢谢。