消息关闭
    暂无新消息!
#define _CRT_SECURE_NO_DEPRECATE
#define _WINSOCK_DEPRECATED_NO_WARNINGS
#include<WinSock2.h>  
#include<stdio.h>
//加载静态lib文件或者加载动态dll文件  
#pragma comment(lib, "ws2_32.lib")
void main()
{
//加载套接字库  
WORD wVersionRequested;
WSADATA wsaData;
int err;
wVersionRequested = MAKEWORD(1, 1);
err = WSAStartup(wVersionRequested, &wsaData);
if (err != 0)
{
return;
}
if (LOBYTE(wsaData.wVersion) != 1 || HIBYTE(wsaData.wVersion) != 1)
// 检查这个低字节是不是1,高字节是不是1以确定是否我们所请求的1.1版本   
// 否则的话,调用WSACleanup()清除信息,结束函数   

{
WSACleanup();
return;
}
//创建套接字  
SOCKET sockSrv = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);//AF_INET  ipv4协议  SOCK_DGRAM 使用不连续不可靠的数据包连接。SOCK_SEQPACKET可靠
SOCKADDR_IN addrSrv;
addrSrv.sin_addr.S_un.S_addr = htonl(INADDR_ANY);
addrSrv.sin_family = AF_INET;
addrSrv.sin_port = htons(6000);
//绑定套接字  
bind(sockSrv, (SOCKADDR *)&addrSrv, sizeof(SOCKADDR));
char recvBuf[100];
char sendBuf[100];
char tempBuf[200];
listen(sockSrv, 5);
SOCKADDR_IN addrClient;
int len = sizeof(SOCKADDR);
while (1)
{
//等待并接收数据  
recvfrom(sockSrv, recvBuf, 100, 0, (SOCKADDR *)&addrClient, &len);
if ('q' == recvBuf[0])
{
sendto(sockSrv, "q", strlen("q") + 1, 0, (SOCKADDR*)&addrClient, len);
printf("Chat end!\n");
break;
}
sprintf(tempBuf, "%s say %s", inet_ntoa(addrClient.sin_addr), recvBuf);
printf("%s\n", tempBuf);
//发送数据  
printf("Please input data:\n");
gets_s(sendBuf);
sendto(sockSrv, sendBuf, strlen(sendBuf) + 1, 0, (SOCKADDR*)&addrClient, len);
}
//关闭套接字  
closesocket(sockSrv);
WSACleanup();
}//服务端



#define _CRT_SECURE_NO_DEPRECATE
#define _WINSOCK_DEPRECATED_NO_WARNINGS
#include<WinSock2.h>  
#include<stdio.h>
//加载静态lib文件或者加载动态dll文件  
#pragma comment(lib, "ws2_32.lib")
void main()
{
    //加载套接字库  
WORD wVersionRequested;
    WSADATA wsaData;
    int err;
    wVersionRequested = MAKEWORD(1, 1);
    err = WSAStartup(wVersionRequested, &wsaData);
    if (err != 0)
    {
        return;
    }
    if (LOBYTE(wsaData.wVersion) != 1 || HIBYTE(wsaData.wVersion) != 1)
    {
        WSACleanup();
        return;
    }
   //创建套接字  
   SOCKET sockClient = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);

   SOCKADDR_IN addrSrv;
   addrSrv.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
   addrSrv.sin_family = AF_INET;
   addrSrv.sin_port = htons(6000);
   connect(sockClient, (SOCKADDR*)&addrSrv, sizeof(SOCKADDR));
  
   char recvBuf[100];
       char sendBuf[100];
       char tempBuf[200];
   recv(sockClient, recvBuf, 100, 0);

   int len = sizeof(SOCKADDR);

   while (1)
   {
       //发送数据  
   printf("Please input data:\n");
       gets_s(sendBuf);
       sendto(sockClient, sendBuf, strlen(sendBuf) + 1, 0, (SOCKADDR*)&addrSrv, len);
       //等待并接收数据  
       recvfrom(sockClient, recvBuf, 100, 0, (SOCKADDR *)&addrSrv, &len);
       if ('q' == recvBuf[0])
       {
           sendto(sockClient, "q", strlen("q") + 1, 0, (SOCKADDR*)&addrSrv, len);
           printf("Chat end!\n");
           break;
        }
       sprintf(tempBuf, "%s say %s", inet_ntoa(addrSrv.sin_addr), recvBuf);
       printf("%s\n", tempBuf);

   }
   //关闭套接字  
   closesocket(sockClient);
   WSACleanup();
   }//客户端
 想写一个基于TCP的聊天程序,运行总是烫烫烫

5个回答

︿ 0
烫烫烫是没有了,可是服务器端会显示204.204.204.204 ,这是为什么,求大神!
︿ 0
出现乱码,这是因为字符串数组缺少字符串的结束标志'\0',建议接收之前,先将缓存初始化一下,比如
memset(recvBuf, 0, 100);