zoukankan      html  css  js  c++  java
  • TCP网络程序设计

    //服务端程序
    #define _CRT_SECURE_NO_WARNINGS
    #include "winsock2.h"
    #include "stdio.h"
    #include "time.h"
    #pragma comment(lib,"WS2_32.lib")
    #define MAX_BUFFER 1024 /*服务器缓冲区的最大值为1024个字符*/
    //#define NULL 0
    #define DAYTIME_SERVER_PORT 13 /*常量表示服务器的端口号为13*/
    
    
    int main()
    {
    	SOCKET serverFd;
    	int connectionFd, i = 1; /*统计客户请求次数*/
    	struct sockaddr_in servaddr;
    	char timebuffer[MAX_BUFFER + 1];
    	time_t currentTime;
    	WSADATA wsaData;
    
    	if (WSAStartup(MAKEWORD(2, 2), &wsaData) == SOCKET_ERROR)
    	{
    		printf("命令套接口初始化失败
    ");
    		WSACleanup();//终止使用Winsock DLL库,释放系统资源
    		return-1;
    	}
    
    
    	serverFd = socket(AF_INET, SOCK_STREAM, 0); /*创建服务器端的套接字,三个参数分别代表 使用TCP/IP;传输过程使用TCP;不适用其他特殊协议*/
    
    	if (serverFd == -1)
    	{
    		printf("socket error!
    ");
    		WSACleanup();//终止使用Winsock DLL库,释放系统资源
    		return(-1);
    	}
    
    	memset(&servaddr, 0, sizeof(servaddr));
    	servaddr.sin_family = AF_INET;
    	servaddr.sin_addr.S_un.S_addr = htonl(INADDR_ANY); /*将4字节主机字节数顺序转换到网络字节顺序*/
    	servaddr.sin_port = htons(DAYTIME_SERVER_PORT);/*将4字节主机字节数顺序转换到网络字节顺序*/
    
    	if (bind(serverFd, (struct sockaddr *)&servaddr, sizeof(servaddr)) == SOCKET_ERROR)/*地址绑定*/
    	{
    		printf("bind( ) Failed: %d
    ", WSAGetLastError());
    		WSACleanup();//终止使用Winsock DLL库,释放系统资源
    		return(-1);
    	}
    
    
    	listen(serverFd, 5);/*监听客户端的连接请求,定义最大的链接次数为5次*/
    
    	printf("daytime服务器已经启动,正在监听来自客户端的服务请求......
    ");//运行界面上提示服务器软件处于启动状态
    
    	while (1)
    	{
    		connectionFd = accept(serverFd, (struct sockaddr *)NULL, NULL);/*连接建立后将存放在缓冲区的时间发送到客户端*/
    		if (connectionFd >= 0)
    		{
    			currentTime = time(NULL);
    			sprintf(timebuffer, "%s
    ", ctime(&currentTime));
    			printf("已有%d个访问者
    ", i++);
    			send(connectionFd, timebuffer, strlen(timebuffer), 0);
    			closesocket(connectionFd);
    		}
    	}
    	WSACleanup();//终止使用Winsock DLL库,释放系统资源
    	return(1);
    }
    

      

    //客户端程序
    #include "winsock2.h"
    #include "stdio.h"
    #include "time.h"
    #pragma comment(lib,"WS2_32.lib")
    #define MAX_BUFFER 1024 /*客户机缓冲区的最大值为1024个字符*/
    #define DAYTIME_SERVER_PORT 13 /*常量表示服务器的端口号为13*/
    int main()
    {
    	SOCKET connectionFd;
    	int in;
    	struct sockaddr_in servaddr;
    	char timebuffer[MAX_BUFFER + 1];
    	time_t currentTime;
    	WSADATA wsaData;
    	if (WSAStartup(MAKEWORD(2, 2), &wsaData) == SOCKET_ERROR)
    	{
    		printf("命令套接口初始化失败
    ");
    		return-1;
    	}
    	connectionFd = socket(AF_INET, SOCK_STREAM, 0); /*创建服务器端的套接字,三个参数分别代表 使用TCP/IP;传输过程使用TCP;不适用其他特殊协议*/
    	if (connectionFd == -1)
    	{
    		printf("socket error!
    ");
    		return(-1);
    	}
    	memset(&servaddr, 0, sizeof(servaddr));
    	servaddr.sin_family = AF_INET;
    	servaddr.sin_port = htons(DAYTIME_SERVER_PORT);/*将4字节主机字节数顺序转换到网络字节顺序*/
    	//inet_addr()函数把字符串形式的IP地址转换为unsiged long型的整数值
    	servaddr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1"); /*此处设置daytime服务器所在机器IP地址,应根据实际情况确定*/
    	if (connect(connectionFd, (struct sockaddr *)&servaddr, sizeof(servaddr)) == INVALID_SOCKET)
    	{
    		printf("connect() failed:%d
    ", WSAGetLastError());//在界面上输出连接失败的错误提示信息
    		return(0);
    	}
    	while ((in = recv(connectionFd, timebuffer, MAX_BUFFER, 0))>0)
    	{
    		timebuffer[in] = 0;
    		printf("
    %s", timebuffer);
    	}
    	closesocket(connectionFd);
    	WSACleanup();//终止使用Winsock DLL库,释放系统资源
    	return(1);
    }
    

      

  • 相关阅读:
    python list间的并集、差集与交集
    kafka常用命令,启动/停止/查看主题列表/消费/生产
    python json
    lrzsz
    HashMap实现原理,源码分析
    Java中try catch finally语句中含有return语句的执行情况
    Maven
    我的面试题
    JSON数据格式
    springMVC2
  • 原文地址:https://www.cnblogs.com/chankeh/p/6857060.html
Copyright © 2011-2022 走看看