服务器端在Linux环境下。
Server.cpp
#include <iostream>
//#include <WinSock2.h>
using namespace std;
enum{PORT=12345};
#ifdef _WIN32 //windows下
#include <WinSock2.h>
typedef int socklen_t;
#else //Linux下
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
typedef unsigned int SOCKET;
#define INVALID_SOCKET (SOCKET)(~0)
#define SOCKET_ERROR (-1)
#endif
int main()
{
#ifdef _WIN32 //windows项目下
WSADATA wd; //套接字库信息结构体
//参数1:套接字库版本号
//参数2:输出参数,保存加载的套接字库的相关信息
WSAStartup(0X0202,&wd); //加载套接字
#endif
//创建socket句柄
SOCKET sock=socket(AF_INET,SOCK_STREAM,0);
sockaddr_in sa={AF_INET,htons(PORT)};
//句柄绑定到端口上
int n=bind(sock,(sockaddr*)&sa,sizeof(sa));
listen(sock,5); //侦听,参数2:等待连接队列的最大长度
socklen_t nLen=sizeof(sa);
//int nLen=sizeof(sa); ******windows下
while(true)
{
//等待客户端的连接
SOCKET socka=accept(sock,(sockaddr*)&sa,&nLen);
cout<<inet_ntoa(sa.sin_addr)<<"-"<<htons(sa.sin_port)<<"登陆"<<endl;
while(true)
{
char s[2048];
//接收数据
n=recv(socka,s,sizeof(s),0);
if(n<=0) //未接收到数据时
break;
s[n]=0;
cout<<s<<endl;
}
cout<<inet_ntoa(sa.sin_addr)<<"-"<<htons(sa.sin_port)<<"退出"<<endl;
}
return 0;
}
客户端在Windows环境下:
Client.cpp
#include <iostream>
#include <WinSock2.h>
using namespace std;
enum{PORT=12345};
int main()
{
WSADATA wd;
WSAStartup(0x0202,&wd);
SOCKET sock=socket(AF_INET,SOCK_STREAM,0);
sockaddr_in sa={AF_INET,htons(PORT)};
sa.sin_addr.s_addr=inet_addr("192.168.1.5"); //Linux和windows下均可
//sa.sin_addr.S_un.S_addr=inet_addr("192.168.1.5"); //windows下
//通过sa连接服务器
int n=connect(sock,(sockaddr*)&sa,sizeof(sa));
if(n<0)
{
cout<<GetLastError()<<endl;
//cout<<errno<<endl; ***Linux下
return -1;
}
char s[2048];
while(true)
{
cout<<"请输入你要发送的文字[#退出]";
cin>>s;
if('#'==s[0])
break;
send(sock,s,strlen(s),0);
}
return 0;
}