server端双线程的tcp socket (阻塞)实验

 

在server端创建一个接收线程,一个发送线程

client端依旧单线程

 server.cpp

// Thread.cpp : 定义控制台应用程序的入口点。
//
  
//#include "stdafx.h"
#include 
#include 
#include 
#include 
#pragma comment(lib, "ws2_32.lib")
using namespace std;
#define buf_size 30
  
  
#define PORT 4000
#define IP_ADDRESS "127.0.0.1"
  
//创建线程
DWORD WINAPI Recv (LPVOID ipParameter)
{
    SOCKET clientSocket  = (SOCKET)ipParameter;
    int RET =  0;
    char RecvBuffer[buf_size];
    //初始化 recvBuffer
    while(true){
    memset(RecvBuffer,0x00,sizeof(RecvBuffer));
    RET  =  recv(clientSocket,RecvBuffer,buf_size,0);
    if(RET == 0||RET == SOCKET_ERROR)
    {
        cout<<"客户端退出"<

client.cpp

//#include "stdafx.h"
#include 
#include 
#include 
#include 
#pragma comment(lib, "ws2_32.lib")
using namespace std;
#define buf_size 30
  
  
#define PORT 4000
#define IP_ADDRESS "127.0.0.1"
int main(void)
{
    WSADATA     WSA;
    SOCKET      clientSocket;
    struct      sockaddr_in  serveAddr;
    int         AddrLen =  0;
    HANDLE      hThread =  NULL;
    int         RET = 0;
    char        SendBuffer[buf_size];
    char        RecvBuffer[buf_size];
    //init windows socket
    if (WSAStartup(MAKEWORD(2,2),&WSA)!= 0 )
    {
        cout<<"init failed"<

实验效果:

一个发送和接收是一个轮回。如果连续两次发送,那么对方必须要到第二轮回时候才能将缓冲器文本打印出来

for example:

现在服务端连续发送两次,如上所说,客户端要到第二次轮回才能显示服务器第二次发送的内容

客户端还未按回车前的状态:

server端双线程的tcp socket (阻塞)实验_第1张图片

按了回车后:

server端双线程的tcp socket (阻塞)实验_第2张图片

 

转载于:https://my.oschina.net/u/3331172/blog/1827783

你可能感兴趣的:(网络,操作系统)