简单地实现了一下监听,连接,信息收发.
一直都没解决的就是一个奇怪的连接问题......两次都是只要碰到会用上new或delete(直接或间接的)的地方全都出现连接错误......暂时先不管了......
真正做起项目来就没这么容易了, 暂时也只是熟悉了一下API的使用.
win sock 编程到此为止~next...
客户端向服务器发信息, 收到后打印一下,再回发. 客户端收到信息后打印.
---------------这是服务器的------------------
- #include "afxmt.h"
- #include "winsock2.h"
- #pragma comment(lib,"WS2_32.LIB")
- int bufi;
- class mserver{
- private:
- SOCKET ssock,csock;
- sockaddr_in saddr,caddr;
- int len;
- char buf[4096];
- public:
- mserver(){
- }
- mserver(int port,int maxclient){
- saddr.sin_family=AF_INET;
- saddr.sin_port=htons(port);
- saddr.sin_addr.s_addr=INADDR_ANY;
- ssock=socket(AF_INET,SOCK_STREAM,0);
- if(ssock==INVALID_SOCKET){
- printf("build socket error/n");
- }
- if(bind(ssock,(struct sockaddr*)&saddr,sizeof(saddr))==SOCKET_ERROR){
- printf("socket bind fail/n");
- }
- len=sizeof(caddr);
- }
- void close(){
- closesocket(ssock);
- closesocket(csock);
- }
- void beginlisten(){
- if(listen(ssock,10)==SOCKET_ERROR){
- printf("listen fail/n");
- }
- }
- void maccept(){
- sockaddr a;
- csock=accept(ssock,(struct sockaddr*)&caddr,&len);
- if(csock==INVALID_SOCKET){
- printf("accept fail : %d/n",WSAGetLastError());
- }
- printf("client from %s connected/n",inet_ntoa(caddr.sin_addr));
- }
- int receive(){
- memset(buf,0,4096);
- if(recv(csock,buf,4096,0)==SOCKET_ERROR){
- return 0;
- }
- printf("message received : %s/n",buf);
- send(csock,buf,4096,0);
- return 1;
- }
- };
- int main()
- {
- WSADATA wsaData;
- if (WSAStartup(MAKEWORD(2,1),&wsaData)){
- printf("Winsock initializing fail/n");
- WSACleanup();
- return 0;
- }
- mserver s(12345,10);
- s.beginlisten();
- s.maccept();
- while(s.receive());
- s.close();
- WSACleanup();
- return 0;
- }
-
----------------这是客户端的-------------------
- #include "stdio.h"
- #include "afxmt.h"
- #include "winsock2.h"
- #pragma comment(lib,"WS2_32.LIB")
- class mclient{
- private:
- SOCKET sock;
- sockaddr_in saddr;
- int len;
- char buf[4096];
- public:
- mclient(){
- sock=socket(AF_INET,SOCK_STREAM,0);
- len=sizeof(saddr);
- }
- bool mconnect(char* addr,int port){
- saddr.sin_family=AF_INET;
- saddr.sin_port=htons(port);
- saddr.sin_addr.s_addr=inet_addr(addr);
- if(connect(sock,(struct sockaddr*)&saddr,len)==SOCKET_ERROR){
- printf("connect fail : %d",WSAGetLastError());
- return false;
- }
- return true;
- }
- void close(){
- closesocket(sock);
- }
- void msend(char* mes){
- send(sock,mes,strlen(mes),0);
- }
- bool receive(){
- memset(buf,0,4096);
- if(recv(sock,buf,4096,0)==SOCKET_ERROR){
- return false;
- }
- else{
- printf("received from server : %s/n",buf);
- return true;
- }
- }
- };
- int main()
- {
- WSADATA wsaData;
- if (WSAStartup(MAKEWORD(2,1),&wsaData)){
- printf("Winsock initializing fail/n");
- WSACleanup();
- return 0;
- }
- mclient a;
- if(!a.mconnect("172.18.48.7",12345)){
- return 0;
- }
- char buf[1024];
- while(scanf("%s",buf)){
- if(strcmp(buf,"quit")==0){
- break;
- }
- a.msend(buf);
- a.receive();
- }
- a.close();
- WSACleanup();
- return 0;
- }