通信编程

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
#include<windows.h>
#include<stdio.h>
#include<winsock.h>
void main()
{
SOCKET sersock,clisock,consock;//定义监听接口和绘画接口
WSADATA wsaData;
struct sockaddr_in seraddr,cliaddr;//定义服务器和客户地址变量
if (FD_ISSET (consock ,&readfds))
{
recvnum=recv(consock ,recvbuff,lstrlen (recvbuff),0);
printf("he number of char that we received is:%d\n",recvnum);
printf ("the data we received is:%d\n",recvbuff);
{
hostip=inet_ntoa(*(struct in_addr *)*hostinfo->h_addr_list);
printf("The host IP is:%s\n",hostip);//输出本机的IP地址
}
else//gethostname失败
{
printf("gethostname() Error!");
scanf("s%",&sendbuff);
send (clisock ," My Server IP Address is ",25,0);
send (clisock ,hostip ,lstrlen (hostip),0);
sendnum=send(clisock ,sendbuff ,lstrlen (sendbuff ),0);//发送数据
if(result!=0)
{
printf("bind() Error!");
printf("The Error is:%d\n",WSAGetLastError());
exit(0);
}
else
printf("bind() sucessfully!\n");
result =listen (sersock,3);//设置监听态
{
closesocket(sersock);
closesocket(consock);
}
}
2、客户端代码
#include <windows.h>
#include <stdio.h>
#include <winsock.h>
void main()
{
SOCKET clisock,sersock,consock; //定义套接口
seraddr.sin_port=htons(serport);//端口
seraddr.sin_addr.S_un.S_addr=inet_addr(hostip);//IP
result=bind(sersock,(sockaddr *)&seraddr,sizeof(seraddr));//绑定套接口
printf("The Error is:%d\n",WSAGetLastError());
exit(0);
}
}
printf("please input a port(better bigger than 1024):");
scanf("%d",&serport);
seraddr.sin_family=AF_INET;
}
len=sizeof(cliaddr);
consock=accept(sersock,(sockaddr*)&cliaddr,&len);
if (consock ==SOCKET_ERROR)
{
printf("accept() Error!");
printf("The Error is:%d\n",WSAGetLastError());
exit(0);
}
else
{
printf("gethostname( successfully\n");
if((hostinfo=gethostbyname(hostname))!=NULL) //根据主机名返回主机信息
{
hostip=inet_ntoa (*(struct in_addr *)*hostinfo->h_addr_list);
if(clisock==INVALID_SOCKET) //出错
{
printf("socket()Error!");
printf("The Error is:%d\n",WSAGetLastError()); //取得错误代码
exit(0);
}
else
printf("socekt() sucessfully!\n");
seraddr.sin_family=AF_INET;
seraddr.sin_port=htons(port);
seraddr.sin_addr.S_un.S_addr=inet_addr(ip);
ret=connect(clisock,(struct sockaddr *)&seraddr,sizeof(seraddr));
printf("the char number that we send out is %s:d%\n",sendnum);
FD_ZERO (&readfds);
FD_SET (consock ,&readfds);
select(consock+1, &readfds,NULL ,NULL,NULL);
if (result!=0)//出错
{
printf("listen() Error!");
printf("The Error is:%d\n",WSAGetLastError());
exit(0);
}
else
{
printf("listen() sucessfully!\n");
printf("begin listening ...\n");
printf("please input the data that you want பைடு நூலகம்o send:");
scanf("%s",&sendbuff);
sendnum=send(clisock,sendbuff,lstrlen(sendbuff),0);//发生数据
send(clisock,"My localhostip address is",25,0);
send(clisock,hostip,lstrlen(hostip),0);
{
printf("WSAStartup() Eeeor!");
printf("The Error is:%d\n",WSAGetLastError()); //取得错误代码
exit(0);
}
else //初始化成功
{
printf("WSAStartup() successfully!\n");
}
//获取本机IP地址
实验1:Winsock通信编程
一、实验目的
1.学习网络中进程之间通信的原理和实现方法;
2.掌握在VB或VC++等集成开发环境中编写网络程序的方法;
二、实验设备
1.Windows2000以上操作系统;
2.VB和Visual C++ 6.0语言环境;
3.每人一台PC机。
三、实验步骤
(一)程序及其说明
1、服务端代码
}
sersock=socket(AF_INET,SOCK_STREAM,0);//建立套接口
if(sersock==INVALID_SOCKET)//出错
{
printf("socket() Error!");
printf("The Error is:%d\n",WSAGetLastError());//取得错误代码
fd_set readfds;
if(WSAStartup(0x101,&wsaData))
{
printf("WSAStartup() Error!");
printf("The Error is:%d\n",WSAGetLastError());//取得错误代码
exit(0);
}
else
{
printf("WSAStartup() sucessfully!\n");//初始化成功
printf("The LocalClienthost IP is:%s\n",hostip); //输出本机IP地址
}
else //gethostbyname失败
{
printf("gethostbyname() Error!");
printf("The Error is :%s\n",WSAGetLastError()); //取得错误代码
if(ret==SOCKET_ERROR)
{
printf("connet() Error!");
printf("The Error is:%d\n",WSAGetLastError());//取得错误代码
exit(0);
}
else
printf("connect server sucessfully!\n");
}
else
{
printf("the socket can't read!");
}
printf ("if you want to quit this the server ,please enter the \"q\"\n");
char*str;
scanf ("%s",&str);
if (! strcmp("q",str))
exit(0);
}
else
{
printf("accept()sucessfully!\n");
printf("connect from %s:d%\n", inet_ntoa(cliaddr.sin_addr),ntohs (cliaddr.sin_port));
}
printf("Please input the data that you want to send :");
if (gethostname(hostname, sizeof(hostname))!=0) //返回标准的本机主机名发生错误
{
printf("gethostname() Error!");
printf("The Error is:%d\n",WSAGetLastError()); //取得错误代码
char hostname[255];
char * hostip;
PHOSTENT hostinfo;//定义一个主机信息结构变量
unsigned short serport;//服务端口
int result,len,recvnum,sendnum;
char sendbuff[50];
char recvbuff[50];
unsigned short port ; //端口
char hostname[255]; //主机名
char *hostip; //主机ip
fd_set readfds; //
WSADATA wsaData;
PHOSTENT hostinfo; //定义一个主机信息结构变量
if (WSAStartup(0x101,&wsaData))
int ret,sendnum,len ,recvnum;
char recvbuff[50]; //接收缓冲区
char sendbuff[50]; //发送缓冲区
struct sockaddr_in seraddr,cliaddr; //定义服务器地址
char serIp[40];
char *ip; //服务器IP地址
exit(0);
}
else
{
printf("socket() sucessfully!\n");
}
//获取本机IP地址
if(gethostname(hostname,sizeof(hostname))!=0)//返回标准的本机主机名发生错误
{
printf("gethostname() Error!");
exit(0);
}
}
printf("please input server Ip:"); //输入服务器IP
scanf("%s",&serIp);
ip=serIp;
printf("please input server port:"); //输入服务端口
scanf("%d",&port);
clisock=socket(AF_INET,SOCK_STREAM,0);
printf("The Error is:%d\n",WSAGetLastError());
exit(0);
}
else
{
printf("gethostname() sucessfully!\n");
if((hostinfo=gethostbyname(hostname))!=NULL)//根据主机名返回主机信息
相关文档
最新文档