一个c语言的winsock程序

一个c语言的winsock程序,第1张

你没有接受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)

}

1、要实现网络编程,首先得了解网络编程的原理。

大部分网络编程底层都是通过TCP/IP或者UDP协议进行通讯,不管是TCP还是UDP通讯,都是通过调用socket实现的。

Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议。

Socket通讯分为两部分:服务器端和客户端,服务器端监听客户端的连接,连接上之后,实现数据通讯,流程

2、用C语言调用Socket实现通讯

服务器端示例代码如下:

#include

#include

#include

#include

#include

#include

#include

#include

#definePORT1500//端口号

#defineBACKLOG5/*最大监听数*/

intmain(){

intsockfd,new_fd/*socket句柄和建立连接后的句柄*/

structsockaddr_inmy_addr/*本方地址信息结构体,下面有具体的属性赋值*/

structsockaddr_intheir_addr/*对方地址信息*/

intsin_size

sockfd=socket(AF_INET,SOCK_STREAM,0)//建立socket

if(sockfd==-1){

printf(\"socketfailed:%d

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

charhost_name[256]

intn

struct WSAData wsadata

int sock

struct sockaddr_in srvaddr

struct hostent *hp

chardata[1024]

charc

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

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11581774.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-17
下一篇 2023-05-17

发表评论

登录后才能评论

评论列表(0条)

保存