tcp网络编程socket

socket通信怎么传进度条从1--100
在传递信息是const char而定义的是char,怎么用循环去传递这个信息从服务端到客户端

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 看下这篇博客,也许你就懂了,链接:TCP-socket异常情况
  • 除此之外, 这篇博客: 糖儿飞教你学C++ Socket网络编程——8. 异步通信版的TCP通信程序中的 4.2.1 服务器端程序制作步骤 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

    1)新建工程,选择“Win32 Application”,输入工程名(如TCPAsync_Server),然后选择“一个典型的Hello World程序”。

    2)在左侧选择FileView选项卡,找到对应的源文件(如TCPAsync_Server.cpp),将WinMain函数中DialogBox一行(148行)和return 0; 保留,其他代码全部删除,再将DialogBox中第3个参数HWnd改为NULL。

    3)切换到ResourceView选项卡,找到Dialog下的“IDD_ABOUTBOX”,将对话框的界面及各个控件的ID值设置为如图4-2所示。

    图4-2 对话框的界面及各控件ID值

    4)打开TCPAsync_Server.cpp文件,编写如下代码:

    #include "stdafx.h"

    #include "resource.h"

    #include "stdio.h"

    #include "WINSOCK2.h"

    #include <time.h>

    #pragma comment(lib,"ws2_32.lib")

     

    #define WM_SOCKET WM_USER+0x10    //自定义socket消息

    HINSTANCE hInst;             

    LRESULT CALLBACK  About(HWND, UINT, WPARAM, LPARAM);

    SOCKET sockSer,sockConn;

    SOCKADDR_IN addrSer, addrCli;

    int len =sizeof(SOCKADDR);

    char sendbuf[256], recvbuf[256];

    char clibuf[999]="客户端: >", serbuf[999]="服务器: >";

    int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,

       LPSTR  lpCmdLine,  int  nCmdShow){   

           DialogBox(hInst, (LPCTSTR)IDD_ABOUTBOX, NULL, (DLGPROC)About);

           return 0;

    }

    LRESULT CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam){

           char port[5],ip[16];

           time_t tt = time(NULL);        //这句返回的只是一个时间cuo

           tm* t= localtime(&tt);

           char szTime[20];           //用来保存时间

           switch (message)   {

           case WM_INITDIALOG:

                  SetDlgItemText(hDlg,IDC_IP,"127.0.0.1");

                  SetDlgItemText(hDlg,IDC_PORT,"5566");

                  WSADATA wsaData;           

                  if(WSAStartup(MAKEWORD(2,2), &wsaData)) {

                         MessageBox(hDlg,"Winsock加载失败","警告",0);

                         WSACleanup();

                         return -1;        }           

                  sockSer=socket(AF_INET,SOCK_STREAM,0);

           //设置异步方式

    WSAAsyncSelect(sockSer, hDlg,WM_SOCKET,FD_ACCEPT |FD_READ | FD_CLOSE);

                  return TRUE;

                 

           case WM_SOCKET:   //自定义消息        

                  switch (WSAGETSELECTEVENT(lParam)) {    //选择要处理的事件

                  case FD_ACCEPT:{   //接收请求事件                          

                         sockConn=accept(sockSer,(SOCKADDR*) &addrCli,&len);                              }

                         break;

                  case FD_READ:  {            //可读事件                  

                                recv(sockConn,recvbuf,256,0);   //接收消息

                                strcat(clibuf,recvbuf);

                         //将接收到的消息添加到列表框中

           SendDlgItemMessage(hDlg,IDC_RECVBUF,LB_ADDSTRING,0,(LPARAM)clibuf);

                                strcpy(clibuf, "客户端: >"); }      //重新给字符串赋值                  

                         break;                  

                  case FD_CLOSE: { //关闭连接事件               

                         MessageBoxA(NULL, "正常关闭连接", "tip", 0);       }                                

                         break;            }           

            break;

                 

                  case WM_COMMAND:               {

                                switch(LOWORD(wParam) )

                                { case IDC_QUIT:        //单击了退出按钮

                                EndDialog(hDlg, LOWORD(wParam));

                                closesocket(sockSer);

                                WSACleanup();

                                return TRUE;

                               

                                case IDC_CREATE:              //单击了创建服务器按钮

                                       GetDlgItemText(hDlg,IDC_IP,ip,16);

                                       GetDlgItemText(hDlg,IDC_PORT,port,5);

                  EnableWindow(GetDlgItem(hDlg,IDC_CREATE),FALSE);  //使该按钮失效

                                       addrSer.sin_family=AF_INET;

                                       addrSer.sin_port=htons(atoi(port));

                                       addrSer.sin_addr.S_un.S_addr=inet_addr(ip);

                                       bind(sockSer,(SOCKADDR*) &addrSer,len);

                                       listen(sockSer,5);  

                                       break;

                                      

                                case IDC_SEND:                 //单击了发送按钮        

                  sprintf(szTime,"   %02d:%02d:%02d",  t->tm_hour, t->tm_min, t->tm_sec);

                         GetDlgItemText(hDlg,IDC_SENDBUF,sendbuf,256);

                         strcat(sendbuf,szTime);

                         send(sockConn,sendbuf,strlen(sendbuf)+1,0);     //发送带时间的消息

                         SetDlgItemText(hDlg,IDC_SENDBUF,NULL);

                         strcat(serbuf,sendbuf);

           SendDlgItemMessage(hDlg,IDC_RECVBUF,LB_ADDSTRING,0,(LPARAM)serbuf);

                         strcpy(serbuf, "服务器: >");  //重新给字符串赋值

                         break;     }            }

                         break;     }

        return FALSE;        }


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^

服务端是否可以先把传输的大小先传过去,然后客户端自己判断就行了

char的问题,可以类型转换吧?