windows的socket_tcp客服端端与linux的socket_tc服务端简单通讯

来源:互联网 发布:无人机编队表演算法 编辑:程序博客网 时间:2024/06/11 01:18
<strong><span style="font-size:18px;">linux下的服务端代码</span></strong>
<strong><span style="font-size:18px;">Server.cpp</span></strong>
#include <stdio.h>#include <sys/socket.h>#include <unistd.h>#include <sys/types.h>#include <netinet/in.h>#include <stdlib.h>#include <time.h>#include <arpa/inet.h> #define SERVER_PORT 20000 // define the defualt connect port id#define LENGTH_OF_LISTEN_QUEUE 10 //length of listen queue in server#define BUFFER_SIZE 255#define WELCOME_MESSAGE "welcome to connect the server. "int main(int argc, char **argv){  int servfd,clifd;  struct sockaddr_in servaddr,cliaddr;   if ((servfd = socket(AF_INET,SOCK_STREAM,0)) < 0)  {  printf("create socket error!\n");  exit(1);  }  bzero(&servaddr,sizeof(servaddr));  servaddr.sin_family = AF_INET;  servaddr.sin_port = htons(SERVER_PORT);  servaddr.sin_addr.s_addr = htons(INADDR_ANY);  if (bind(servfd,(struct sockaddr*)&servaddr,sizeof(servaddr))<0)  {  printf("bind to port %d failure!\n",SERVER_PORT);  exit(1);  }  if (listen(servfd,LENGTH_OF_LISTEN_QUEUE) < 0)  {  printf("call listen failure!\n");  exit(1);  }  while (1)  {  char buf[BUFFER_SIZE];  long timestamp;  socklen_t length = sizeof(cliaddr);   printf("waiting for client to connect!\n");  clifd = accept(servfd,(struct sockaddr*)&cliaddr,&length);  if (clifd < 0)  {  printf("error comes when call accept!\n");  break;  }  else  {  printf("accept success!\n");  }  strcpy(buf,WELCOME_MESSAGE);  printf("from client,IP:%s,Port:%d\n",inet_ntoa(cliaddr.sin_addr),ntohs(cliaddr.sin_port));  timestamp = time(NULL);  strcat(buf,"timestamp in server:");  strcat(buf,ctime(×tamp));  send(clifd,buf,BUFFER_SIZE,0);  close(clifd);    }//exit  close(servfd);  return 0;}


Windows下的客服端代码:

// Client.cpp : Defines the entry point for the console application.//#include "stdafx.h"#include <winsock2.h>#include <stdio.h>#include <stdlib.h>#define DEFAULT_BUFFER 255#define SERVER_PORT 20000 // define the defualt connect port id#define PORT 5000#define REUQEST_MESSAGE "welcome to connect the server.\n"char szServer[128],szMessage[1024];int main(int argc, char* argv[]){WSADATA wsd;SOCKET sClient;char szBuffer[DEFAULT_BUFFER];int ret;struct sockaddr_in server;struct hostent *host = NULL;//int servfd,clifd;// struct sockaddr_in servaddr,cliaddr;// SOCKET ClientSocket;// struct sockaddr_in  ServerAddr;/*if (WSAStartup(MAKEWORD(2,0),&Ws)!=0){cout<<"Init Windows Socket Failed:: "<<GetLastError()<<endl;exit(1);}//Create SocketClientSocket =socket(AF_INET,SOCK_STREAM,0);if(ClientSocket==INVALID_SOCKET){cout<<"Create Socket Failed ::"<<GetLastError()<<endl;exit(1);}ServerAddr.sin_family=AF_INET;ServerAddr.sin_addr.S_un.S_addr=inet_addr(SERVER_ADDRESS);ServerAddr.sin_port=htons(PORT);memset(ServerAddr.sin_zero,0,8);Ret=connect(ClientSocket,(struct sockaddr *)&ServerAddr,sizeof(struct sockaddr));if (Ret==-1){cout<<"Connect Error:: "<<GetLastError()<<endl;exit(1);} else{cout<<"Connect Success"<<endl;}memset(connSuccess,0,8);if ((recvbytes=recv(ClientSocket, connSuccess,8, 0)) ==-1) {cout<<"recv wrong!"<<endl;exit(1);}cout<<"connect success "<<connSuccess<<endl;Ret=send(ClientSocket,sendBuffer,(int)strlen(sendBuffer),0);if (Ret==SOCKET_ERROR){cout<<"Send Info ERROR: "<<GetLastError()<<endl;}memset(recvBuffer,0,BUFSIZE);if ((recvbytes=recv(ClientSocket, recvBuffer, BUFSIZE, 0)) ==-1) {cout<<"recv wrong!"<<endl;exit(1);}// cout<<recvBuffer<<endl;closesocket(ClientSocket);WSACleanup();//add here */if (WSAStartup(MAKEWORD(2,2), &wsd) != 0){printf("Failed to load Winsock library!\n");return 1;}// Create the socket, and attempt to connect to the serversClient = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);if (sClient == INVALID_SOCKET){printf("socket() failed: %d\n", WSAGetLastError());return 1;}server.sin_family = AF_INET;server.sin_port = htons(SERVER_PORT);server.sin_addr.s_addr = inet_addr("10.1.1.188");if (connect(sClient, (struct sockaddr *)&server,sizeof(server)) == SOCKET_ERROR){printf("connect() failed: %d\n", WSAGetLastError());return 1;}// Send and receive dataret = send(sClient, szMessage, strlen(szMessage), 0);if (ret == SOCKET_ERROR){printf("send() failed: %d\n", WSAGetLastError());}//else{//printf("Send '%s' \n", szMessage);ret = recv(sClient, szBuffer, DEFAULT_BUFFER, 0);if (ret == SOCKET_ERROR){printf("recv() failed: %d\n", WSAGetLastError());}else{//szBuffer[ret] = '\0';printf("RECV: '%s'\n",szBuffer);}//}closesocket(sClient);WSACleanup();printf("Hello World!\n");return 0;}


0 0
原创粉丝点击