socket的VC++实现
服务器端与客户端区别 :
摘自http://topic.csdn.net/u/20070124/10/9cf2284c-1cbf-4187-b309-8e5f0bea6f33.html的一段话
客户端程序和服务器端程序通常是多对一的关系,
即一个服务器端程序,面向众多客户端提供数据服务。
程序看具体情况,才能确定是否分两部分来写。
1.网站:只写服务端,浏览器就是客户端程序了,不用再写,这就是 B/S 结构的优势,部署、更新容易
2.类似QQ、网游的:两边都要写,这就是为什么你自己下载 QQ 升级的原因
FPGA 与 PC谁是客户谁是服务呢,首先是一对一,没有应用程序,还谈不少客户与服务吧,只是接收和发送的关系吧。
附录经过测试的程序,测试环境为VC++6.0
#include <stdio.h>
#include <Winsock2.h>
#pragma comment(lib, "ws2_32.lib")
void main(void)
{
WSADATA wsaData;
int iResult = WSAStartup(MAKEWORD(2,2), &wsaData);
if(iResult != NO_ERROR)
printf("Error at WSAStartup()\n");
FILE *fp;
fp=fopen("jpeg.FPGA","wb");
SOCKET socket1;
struct sockaddr_in local;
struct sockaddr_in from;
int fromlen =sizeof(from);
local.sin_family=AF_INET;
local.sin_port=htons(1024); ///监听端口
local.sin_addr.s_addr=inet_addr("192.168.1.216"); ///本机
socket1=socket(AF_INET,SOCK_DGRAM,0);//创建socket AF_INET代表TCP IP协议族 SOCK_DGRAM代表UDP O 为o
bind(socket1,(struct sockaddr*)&local,sizeof local);//对端口进行监听
while (1)
{
char buffer[1024]="\0";
printf("waiting for message from others-------------\n");
if (recvfrom(socket1,buffer,sizeof buffer,0,(struct sockaddr*)&from,&fromlen)!=SOCKET_ERROR)//接收数据
{
printf("Received datagram from %s--%s\n",inet_ntoa(from.sin_addr),buffer);
fprintf(fp,"Received datagram from %s--%s\n",inet_ntoa(from.sin_addr),buffer);//创建文件,将接收到的文件存入到 jpeg.FPGA中
// fprintf(fp,"%s\n",buffer);
////给cilent发信息
// sendto(socket1,buffer,sizeof buffer,0,(struct sockaddr*)&from,fromlen);
}
Sleep(500);
}
closesocket(socket1);
fclose(fp);
}