socket 简单聊天示例
2015-06-11 22:24
399 查看
客户端
服务端
#include <winsock2.h> #include <windows.h> #include <iostream> #include <stdio.h> #include <time.h> #pragma comment(lib, "wsock32.lib") #pragma comment(lib, "Ws2_32.lib") using namespace std; SOCKET ConnectSocket; DWORD WINAPI ThreadProc( LPVOID lpParameter ){ char test[99]; ZeroMemory(test,sizeof(test)); while(recv(ConnectSocket,test,sizeof(test),0)){ time_t rawtime; struct tm * timeinfo; time ( &rawtime ); timeinfo = localtime ( &rawtime ); cout<<asctime (timeinfo); cout<<"He(she) say :"<<test<<endl<<endl; ZeroMemory(test,sizeof(test)); } return 0; } int main() { WSADATA wsaData; //初始化的结构 SOCKADDR_IN servAddr; //套接口结构 //SOCKET ConnectSocket = INVALID_SOCKET; //失败就不变 int iResult; // >0就成功 这是不一定的. // Initialize Winsock iResult = WSAStartup(MAKEWORD(2,2), &wsaData); //初始化套接口 括号里面的是版本 if (iResult != 0) { cout<<"WSAStartup failed"; return -1; //这是告诉系统失败的意思 } ConnectSocket = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP); //(协议,套接口 字符串,TCP协议) if (ConnectSocket == INVALID_SOCKET) { cout<<"Error at socket():\n"; WSACleanup(); return -1; } servAddr.sin_family=AF_INET; //协议 servAddr.sin_addr.S_un.S_addr=inet_addr("127.0.0.1"); servAddr.sin_port=htons(4999); //端口 iResult = connect(ConnectSocket,(LPSOCKADDR)&servAddr,sizeof(servAddr)); //(连接,传入,大小) if (iResult == SOCKET_ERROR) { cout<<"shost failed"; closesocket(ConnectSocket); WSACleanup(); return -1; } char test[99]; ZeroMemory(test,99); CloseHandle(CreateThread(NULL,0,&ThreadProc,NULL,NULL,NULL)); char shuru[99]; while (gets(shuru)){ strcpy(test,shuru); iResult = send(ConnectSocket,test,(int)strlen(test),0); cout<<endl; if (iResult == SOCKET_ERROR) { cout<<"出错了\n"; closesocket(ConnectSocket); WSACleanup(); return -1; } } closesocket(ConnectSocket); WSACleanup(); return 0; }
服务端
#include <winsock2.h> #include <windows.h> #include <iostream> #include <stdio.h> #include <time.h> #pragma comment(lib, "Ws2_32.lib") using namespace std; SOCKET ClientSocket; DWORD WINAPI ThreadProc( LPVOID lpParameter ){ char buff[99]; ZeroMemory(buff,sizeof(buff)); while(recv(ClientSocket,buff,sizeof(buff),0)){ time_t rawtime; struct tm * timeinfo; time ( &rawtime ); timeinfo = localtime ( &rawtime ); cout<<asctime (timeinfo); cout<<"He(she) say :"<<buff<<endl<<endl; ZeroMemory(buff,sizeof(buff)); } return 0; } int main() { WSADATA wsaData; SOCKADDR_IN servAddr; SOCKET ConnectSocket = INVALID_SOCKET; int iResult; // Initialize Winsock iResult = WSAStartup(MAKEWORD(2,2), &wsaData); if (iResult != 0) { cout<<"WSAStartup failed: "; return 1; } ConnectSocket = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP); if (ConnectSocket == INVALID_SOCKET) { cout<<"Error at socket():\n"; WSACleanup(); return 1; } servAddr.sin_family=AF_INET; servAddr.sin_addr.S_un.S_addr=inet_addr("127.0.0.1"); servAddr.sin_port=htons(4999); iResult = bind( ConnectSocket,(LPSOCKADDR)&servAddr,sizeof(servAddr)); if (iResult == SOCKET_ERROR) { cout<<"bind failed"; closesocket(ConnectSocket); WSACleanup(); return 1; } if ( listen( ConnectSocket, SOMAXCONN ) == SOCKET_ERROR ) { cout<< "Listen failed with error: %ld\n"; closesocket(ConnectSocket); WSACleanup(); return 1; } sockaddr_in addrClient; int addrClientlen=sizeof(addrClient); ClientSocket=accept(ConnectSocket,(sockaddr FAR*)&addrClient,&addrClientlen); if (ClientSocket == INVALID_SOCKET) { cout<<"accept failed: %d\n"; closesocket(ConnectSocket); WSACleanup(); return 1; } CloseHandle(CreateThread(NULL,0,&ThreadProc,NULL,NULL,NULL)); char shuru[99]; ZeroMemory(shuru,sizeof(shuru)); while (gets(shuru)){ iResult = send(ClientSocket,shuru , sizeof(shuru), 0); cout<<endl; if (SOCKET_ERROR==iResult) { cout<<"recv failed"; closesocket(ConnectSocket); closesocket(ClientSocket); WSACleanup(); return -1; }} closesocket(ConnectSocket); closesocket(ClientSocket); WSACleanup(); return 0; }
相关文章推荐
- hdu 1848 Fibonacci again and again
- 左旋转字符串
- 一起学编程(4--数据类型及流程)
- BZOJ 4086: [Sdoi2015]travel(SDOI2015 round2 day1)(分类讨论+容斥原理)
- C++系列之类的静态成员
- python的help
- ucore操作系统lab2实验报告之理论部分
- Leetcode[111]-Minimum Depth of Binary Tree
- 端口映射帮助文档
- org.hibernate.MappingException: No Dialect mapping for JDBC type: -4
- 感知机、线性回归、逻辑回归的简单对比
- leetcode 018 4sum (Python)
- org.hibernate.MappingException: No Dialect mapping for JDBC type: -4
- org.hibernate.MappingException: No Dialect mapping for JDBC type: -4
- Web前端或成互联网+时代的职场新贵
- C#使用资源字典
- 第1章 Java程序设计概述
- ARC的内存管理
- WordClassification API
- 什么是道德?