簡單地實現了一下監聽,連接,信息收發.
一直都沒解決的就是一個奇怪的連接問題......兩次都是隻要碰到會用上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;
- }