tcp sever

转载 2016年08月28日 16:22:01
#include<Winsock2.h>
#include
<stdio.h>
#include
<stdlib.h>
#pragma comment (lib,
"ws2_32.lib")

//服务器使用的端口号为5050
#define DEFAULT_PORT 5050
//数据缓冲区长度
#define BUFFER_LENGTH 1024

void main()
{
    
//服务器端口
    int iPort = DEFAULT_PORT;
    WSADATA wsaData;
    SOCKET sListen,sAccept;
    
//存放主机名称
    char hostname[256];
    
//客户地址长度
    int iLen;
    
//发送的数据长度
    int iSend;
    
//接收的数据长度
    int iRecv;
    
//发送给客户的信息
    char send_buf[1024];
    
//接收数据的缓冲区
    char recv_buf[BUFFER_LENGTH];
    
//服务器和客户的地址
    struct sockaddr_in ser,cli;
    PHOSTENT hostinfo;

    printf(
"--------------------------\n");
    printf(
"基于TCP的通信程序的服务器\n");
    
//加载 winsock库
    if(WSAStartup(MAKEWORD(2,2),&wsaData) != 0)
    
{
        printf(
"Failed to load Winsock.\n");
        
return;
    }


    
    
//获得主机名
    if(gethostname(hostname,sizeof(hostname)) != 0)
    
{
        printf(
"gethostname() Error:%u\n",WSAGetLastError());
        
return;
    }
    
   
if((hostinfo = gethostbyname(hostname) )!= NULL)
   
{
    
//如果获得主机名成功的话,调用inet_ntoa()函数取得IP地址
    LPCSTR ip = inet_ntoa(*(struct in_addr *)*hostinfo->h_addr_list);
    printf(
"本机的IP地址 : %s\n",ip);//输出ip地址
    printf("本机的名称是 : %s\n",hostname);
   }

    printf(
"--------------------------\n");

    
//创建服务器端套接口
    sListen = socket(AF_INET,SOCK_STREAM,0);
    
if(sListen == INVALID_SOCKET)
    
{
        printf(
"socket() Failed:%d\n",WSAGetLastError());
        
return;
    }


    
//以下绑定服务器端地址
    ser.sin_family = AF_INET;
    
//端口号:htons()函数把一个二字节字节顺序的数转换为网络字节顺序的数
    ser.sin_port = htons(iPort);
    
//htonl()函数把一个四字节字节的数转换为网络系统字节顺序的数
    
//使用系统指定的IP地址 INADDR_ANY
    ser.sin_addr.s_addr = htonl(INADDR_ANY);
    
if(bind(sListen,(LPSOCKADDR)&ser,sizeof(ser)) == SOCKET_ERROR)
    
{
        printf(
"bind() Failed:%d\n",WSAGetLastError());
        
return;
    }


    
//进入监听状态
    if(listen(sListen,5== SOCKET_ERROR)
    
{
        printf(
"listen() Failed:%d\n",WSAGetLastError());
        
return;
    }


    
//初始化客户地址长度参数
    iLen = sizeof(cli);

    
//初始化接收缓冲区
    memset(recv_buf,0,sizeof(recv_buf));

    
//进入一个无限循环,等待客户的连接请求
    while(1)
    
{
        printf(
"等待客户的连接请求\n");
        sAccept 
= accept(sListen,(struct sockaddr*)&cli,&iLen);

        
if(sAccept == INVALID_SOCKET)
        
{
            printf(
"accept() Failed:&d\n",WSAGetLastError());
            
break;
        }


        printf(
"建立TCP连接成功!\n");
        printf(
"--------------------------\n");

        
//进入一个无限循环,与客户交互
        while(1){

            
//从客户端接收数据
            iRecv = recv(sAccept,recv_buf,BUFFER_LENGTH,0);

            
if(iRecv == SOCKET_ERROR)
            
{
                printf(
"recv() Failed.:%d\n",WSAGetLastError());
                
continue;
            }

            
else if(iRecv == 0)      break;
                
else
                
{
                    
//输出接收到的数据
                    printf("客户端说 : %s",recv_buf);
                    
//输出客户IP地址和端口号
                    printf("(来自:%s:%d)\n",inet_ntoa(cli.sin_addr),ntohs(cli.sin_port));
                }



            
//给连接的客户发送信息
            printf("发送消息: ");
            gets(send_buf);

            iSend 
= send(sAccept,send_buf,sizeof(send_buf),0);

            
if(iSend == SOCKET_ERROR)
            
{
                printf(
"send() Failed:%d\n",WSAGetLastError());
                
break;
            }

            
else if(iSend == 0)     break;
                
else
                
{
                    printf(
"发送成功.\n");
                    printf(
"--------------------------\n");
                }

        }

            
//关闭接收套接口
            closesocket(sAccept);
    }

    
//关闭监听套接口
    closesocket(sListen);
    
//卸载winsock库
    WSACleanup();
}


 

客户端

#include<Winsock2.h>
#include
<stdio.h>
#include
<stdlib.h>
#pragma comment (lib,
"ws2_32.lib")

//服务器使用的端口号为5050
#define DEFAULT_PORT 5050
#define DATA_BUFFER 1024

void main()
{
    WSADATA wsaData;
    SOCKET sClient;
    
int iPort = DEFAULT_PORT;
    
//接收数据的缓冲
    int iSend;
    
int iRecv;
    
//要发送给服务器的信息
    char send_buf[1024];
    
//接收数据的缓冲
    char recv_buf[DATA_BUFFER];
    
//服务器端地址
    struct sockaddr_in ser;

    printf(
"--------------------------\n");
    printf(
"基于TCP的通信程序的客户端\n");

    
//提示在命令持中输入法服务器IP地址
    printf("输入服务器IP:");

    
char ipz[32];    
    gets(ipz);
    
//char * ipz=&ip;

    
//接收数据的缓冲区初始化
    memset(recv_buf,0,sizeof(recv_buf));

    
if(WSAStartup(MAKEWORD(2,2),&wsaData) != 0)
    
{
        printf(
"Failed to load Winsock.\n");
        
return;
    }


    
//填写要连接的服务器地址信息
    ser.sin_family = AF_INET;
    ser.sin_port 
= htons(iPort);
    
//inet_addr()函数将命令持的点扫IP地址转化为用二进制表示的网络顺序的IP地址
    
//ser.sin_addr.s_addr = inet_addr(argv[1]);
    ser.sin_addr.s_addr = inet_addr(ipz);
    
//建立客户端流式套接口
    sClient = socket(AF_INET,SOCK_STREAM,0);

    
if(sClient == INVALID_SOCKET)
    
{
        printf(
"socket() Failed:%d\n",WSAGetLastError());
        
return;
    }


    
//请求与服务器端建立TCP连接
    if(connect(sClient,(struct sockaddr*)&ser,sizeof(ser)) == INVALID_SOCKET)
    
{
        printf(
"connect() Failed.:%d\n",WSAGetLastError());
        
return;
    }

    
else
    
{
        printf(
"建立TCP连接成功!\n");
        printf(
"--------------------------\n");

        
//进入一个无限循环,与服务器交互
        while(1){

            
//向服务器发送数据

            printf(
"发送消息:");
            gets(send_buf);

            iSend 
= send(sClient,send_buf,sizeof(send_buf),0);

            
if(iSend == SOCKET_ERROR)
            
{
                printf(
"send() Failed:%d\n,WSAGetLastError()");
                    
return;
            }

            
else if(iSend == 0)
                
return;
                
else
                    printf(
"发送成功.\n");


            
//从服务器端接收数据
            iRecv = recv(sClient,recv_buf,sizeof(recv_buf),0);

            
if(iRecv == SOCKET_ERROR)
            
{
                printf(
"recv() Failed:%d\n",WSAGetLastError());
                
return;
            }

            
else if(iRecv == 0)
                
return;
                
else
                
{
                    
//显示从服务器收到的信息
                    printf("服务器说:%s\n",recv_buf);
                    printf(
"--------------------------\n");
                }

        }

    }


    closesocket(sClient);
    WSACleanup();
}

MFC tcpserver转发数据 编程思想

正常两个独立的类之间是不能相互访问的,如果一个类的对象想访问另一个类的对象中的方法或者成员,最容易想到的方法就是类里面创建静态方法或者静态成员,还有一种方法就是通过访问调用这2个类的类对象,例如在MF...
  • u010615629
  • u010615629
  • 2015年11月30日 12:06
  • 774

TCP Server《——》TCP Client

#include #include #pragma comment(lib, "WS2_32") // 链接到WS2_32.libclass CInitSock {public: CInitSock...
  • yangzhenping
  • yangzhenping
  • 2010年03月05日 16:31
  • 1281

Android TCP 客户端实现

因为项目上需要实现一个TCP Client 端;在网上找好多例子基本上都是阻塞方式完成; 我的实现例子:由Activity 及sever 来实现,在sever 创建一个线程来监听接受数据。收到数...
  • sdvch
  • sdvch
  • 2013年10月29日 23:45
  • 17873

C# TCP sever & client

http://www.cnblogs.com/arkin/archive/2012/08/17/tcp.html TCP协议是一个基本的网络协议,基本上所有的网络服务都是基于TCP协议的,如HTTP...
  • qq542369628
  • qq542369628
  • 2013年01月24日 17:00
  • 542

tcpserver.c

/* tcpserver.c */#include #include #include #include #include #include #include #include #include in...
  • RichardYSteven
  • RichardYSteven
  • 2008年10月20日 22:19
  • 3669

QT TCP Server

主要是实现了TCP服务器端的上位机应用,包括数据收发(字符串及十六进制数据),传输文件的功能,经测试可用。下面主要说明一下几个基于QT的函数: 服务器端读取数据函数:void Widget::Ser...
  • u012246376
  • u012246376
  • 2017年01月11日 21:07
  • 693

TCP协议中,Client和Server是如何通信的?三次握手中第一次发送的内容是什么?

文章转载自 wireshark抓包图解 TCP三次握手/四次挥手详解原博主加入了很多抓包图来解释这个过程,鄙人看不懂抓包的内容,不过大致流程还是看明白了,所以就把抓包部分给去掉了,觉得会好理解一些。T...
  • cczz598
  • cczz598
  • 2015年04月22日 23:42
  • 4750

3个学习Socket编程的简单例子:TCP Server/Client, Select

      以前都是采用ACE的编写网络应用,最近由于工作需要,需要直接只用socket接口编写CS的代码,重新学习这方面的知识,给出自己所用到的3个简单例子,都是拷贝别人的程序。如果你能完全理解这3...
  • zhenjing
  • zhenjing
  • 2009年11月05日 10:24
  • 14902

linux c编程 TCP实例以及优化

文章代码来自于《嵌入式linux应用程序开发 标准教程》 第一个实例实现了服务器和客户端的TCP通信 第二个实例是在第一个的基础上使用了select函数实现多路复用 而不是一直阻塞 服务...
  • liang890319
  • liang890319
  • 2012年12月17日 15:23
  • 3971

SQL Server 不存在或访问被拒绝

 这个是最复杂的,错误发生的原因比较多,需要检查的方面也比较多。  一般说来,有以下几种可能性:  1、SQL Server名称或IP地址拼写有误  2、服务器端网络配置有误  3、客户端网络配置有误...
  • msonchina
  • msonchina
  • 2007年02月25日 11:54
  • 1347
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:tcp sever
举报原因:
原因补充:

(最多只允许输入30个字)