C ++服务器客户端聊天 [英] C++ server client chatting
本文介绍了C ++服务器客户端聊天的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
客户端服务器发送相同的电脑,但没有单独的电脑。
我尝试过:
Client.cpp
client server messaging same pcs but doesn`t work seperate computers.
What I have tried:
Client.cpp
#include<iostream>
#include<string.h>
#include
#include
#include
#include
#include<stdlib.h>
#include<unistd.h>
#include<netdb.h>
using namespace std;
#define IP "192.168.56.1"
int main(){
int client,server;
int portNum=1500;
bool isExit=false;
int bufsize=1024;
char buffer[bufsize];
// char *ip= "192.168.1.101";
struct sockaddr_in server_addr;
client=socket(AF_INET,SOCK_STREAM,0);
if(client<0){
cout<< "Error createing socket." <<endl;
exit(1);
}
cout<< "Client Socket created." <<endl;
server_addr.sin_family=AF_INET;
server_addr.sin_addr.s_addr = inet_addr(IP);
server_addr.sin_port=htons(portNum);
if (connect(client,(struct sockaddr *)&server_addr, sizeof(server_addr)) == 0)
cout << "=> Connection to the server " << inet_ntoa(server_addr.sin_addr) << " with port number: " << portNum << endl;
recv(client,buffer,bufsize,0);
cout<< "Connection confirmed." <<endl;
cout<< "Enter # to end the connection." <<endl;
do{
cout<< "Client:" << " " ;
do{
cin >> buffer;
send(client,buffer,bufsize,0);
if(*buffer=='#'){
send(client,buffer,bufsize,0);
*buffer='*';
isExit=true;
}
}while(*buffer != 42);
cout<< "Server: " << " " ;
do{
recv(client,buffer,bufsize,0);
cout<< buffer << " ";
if(*buffer=='#'){
*buffer='*';
isExit=true;
}
}while(*buffer != 42);
cout << endl;
}while(!isExit);
cout<< "Connection terminated." <<endl;
close(client);
return 0;
}
Server.cpp
Server.cpp
#include<iostream>
#include<string.h>
#include
#include
#include
#include<stdlib.h>
#include<unistd.h>
#include
#define IP "127.0.0.1"
using namespace std;
int main(){
int client,server;
int portNum=1500;
bool isExit=false;
int bufsize=1024;
char buffer[bufsize];
struct sockaddr_in server_addr;
socklen_t size;
client=socket(AF_INET,SOCK_STREAM,0);
if(client<0){
cout<< "Error establishing connection." <<endl;
exit(1);
}
cout<< "Server Socket connection created." <<endl;
server_addr.sin_family=AF_INET;
server_addr.sin_addr.s_addr = htons(INADDR_ANY);
server_addr.sin_port= htons(portNum);
//binding socket
if(bind(client, (struct sockaddr*)&server_addr,sizeof(server_addr))<0){
cout<< "Error binding socket." <<endl;
exit(1);
}
size=sizeof(server_addr);
cout<< "Looking for clients" <<endl;
//listening socket
listen(client,1);
//accept client
server = accept(client,(struct sockaddr*)&server_addr,&size);
if(server<0){
cout<< "Error on accepting." <<endl;
exit(1);
}
while(server>0){
strcpy(buffer,"Server connected..\n");
send(server,buffer,bufsize,0);
cout<< "Connected with client." <<endl;
cout<< "Enter # to end the connection." <<endl;
cout<< "Client: " << " " ;
do{
recv(server,buffer,bufsize,0);
cout<< buffer << " ";
if(*buffer=='#'){
*buffer='*';
isExit=true;
}
}while(*buffer!= '*');
do{
cout << "\nServer:" << " ";
do{
cin>>buffer;
send(server,buffer,bufsize,0);
if(*buffer=='#'){
send(server,buffer,bufsize,0);
*buffer='*';
isExit=true;
}
}while(*buffer != '*');
cout<< "Client: " << " " ;
do{
recv(server,buffer,bufsize,0);
cout<< buffer << " ";
if(*buffer=='#'){
*buffer='*';
isExit=true;
}
}while(*buffer != '*');
}while(!isExit);
cout<< "Connection terminated." <<endl;
isExit=false;
exit(1) ;
}
close(client);
return 0;
}
推荐答案
为什么它不能在单独的PC上工作的答案很简单,与...无关您的代码。
它被称为防火墙,您使用的是端口1500,您需要在两台PC的防火墙上打开该端口。
假设你在windows上,(在linux上搜索适当的):
在Windows防火墙中打开一个端口 - Windows帮助 [ ^ ]
The answer to why it wont work on seperate PC's is simple and nothing to do with your code.
It's called a FIREWALL you are using port 1500 you will need to open that port on the firewalls on both PC's.
Assuming you are on windows, (search appropriate if on linux):
Open a port in Windows Firewall - Windows Help[^]
这篇关于C ++服务器客户端聊天的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文