zoukankan      html  css  js  c++  java
  • windows 网络编程(二)TCP

    1.使用之前必须链接库函数  工程--设置--Link-- 输入ws2_32.lib

      服务端函数编程

    #include <Winsock2.h> 
    #include <stdio.h> 
    #include <memory.h>
    
    void main() 
    {  
    	WORD wVersionRequested;  //保存要加载winsock的版本号
    	WSADATA wsaData;  
    	int err;  
    	//通过MAKEWORD获得要加载的winsock的版本
    	wVersionRequested = MAKEWORD( 1, 1 );  
    	//加载套接字库,确定要使用到socket版本
    	err = WSAStartup( wVersionRequested, &wsaData );  
    	//如果加载失败
    	if ( err != 0 )  
    	{   
    		return;  
    	}         
      //如果需要的版本和现在不匹配
    	if ( LOBYTE( wsaData.wVersion ) != 1 || HIBYTE( wsaData.wVersion ) != 1 )  
    	{   
    		WSACleanup( );//释放资源终止winsock库的调用
       
    		return;   
    	}     
    	//创建TCP流式套接字
    	SOCKET sockSrv=socket(AF_INET,SOCK_STREAM,0);   
    	SOCKADDR_IN addrSrv; //创建服务器网络地址族    
        //S表示 Sock吧un 表示union联合
    	addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);  //将十进制的IP地址转化成ulong
    	addrSrv.sin_family=AF_INET;//指定地址簇
      
    	addrSrv.sin_port=htons(6000);//设定端口号
    
    	bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR)); //绑定端口号  
    	listen(sockSrv,5);//监听,最大连接数是5 
    	SOCKADDR_IN addrClient;//创建客户端网络地址簇  
    	int len=sizeof(SOCKADDR);   
    	while(1)  
    	{    
    		//accept接收客户端请求
    		SOCKET sockConn=accept(sockSrv,(SOCKADDR*)&addrClient,&len);    
    		char sendBuf[100];//
    		//memset(sendBuf,0,100);
    		sprintf(sendBuf,"hello world!",inet_ntoa(addrClient.sin_addr)); //把格式化的数据写入某个字符串缓冲区。
     
    		send(sockConn,sendBuf,strlen(sendBuf)+1,0);//
        
    		char recvBuf[100];//
    		memset(recvBuf,0,100);
    		recv(sockConn,recvBuf,100,0);//
    		
    		printf("%s\n",recvBuf);//
       
    		closesocket(sockConn);  
    	} 
    }
    

     客户端函数编程

    #include <Winsock2.h> 
    #include <stdio.h>
    #include <memory.h>
    
    void main()
    {
    
    	WORD wVersionRequessted;
    	WSAData wsaData;
    	int err;
    
    	wVersionRequessted=MAKEWORD(1,1);
    
    	err=WSAStartup(wVersionRequessted,&wsaData);
    	if (err!=0)
    	{
    		return;
    	}
    
    	if (LOBYTE(wsaData.wVersion)!=1||HIBYTE(wsaData.wVersion)!=1)
    	{
    		WSACleanup();
    		return;
    	}
    
    	SOCKET sockclient=socket(AF_INET,SOCK_STREAM,0);
    
    	sockaddr_in addsrv;
    	addsrv.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");
    	addsrv.sin_family=AF_INET;
    	addsrv.sin_port=htons(6000);
    	connect(sockclient,(sockaddr*)&addsrv,sizeof(sockaddr));
    
    	char recvbuf[100];
    	memset(recvbuf,0,100);
    	recv(sockclient,recvbuf,strlen("this is list")+1,0);
    	printf("%s\n",recvbuf);//
    
    	char sendbuf[100]="clicent is connect";
    	send(sockclient,sendbuf,strlen(sendbuf)+1,0);//
    	closesocket(sockclient);
    	WSACleanup();
    }
    
  • 相关阅读:
    The first appliaction for "Hello World!"
    zone
    learn to study
    深入理解 Angular 2 变化监测和 ngZone
    看看吧
    生命周期钩子
    一个简单的todo
    依赖注入
    @Output()
    @Input
  • 原文地址:https://www.cnblogs.com/yuqilihualuo/p/3014233.html
Copyright © 2011-2022 走看看