.上面程序不变
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.0socket本来就是在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
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)