السلام عليكم ورحمة الله وبركاته ..
إخواني أخواتي ..
عندي كود برنامج بـ ++c
عبارة عن شاتينق أبلكيشن بإستخدام السوكيتس ..
الله يسسسسعدكم اتمنى تساعدوني في تحويله للجافا
لأنه مطلوب مني يالجافا وخبرتي فيها ضعيفة جداا :(
وهذا الكود
#include "chat_server.h"
Server Chat_Server;
UINT ServerRecThread(LPVOID pParam)
{
SOCKET sRecSocket = (SOCKET)pParam;
while(1)
{
if(Chat_Server.RecClient(sRecSocket))
break;
}
return 0;
}
UINT ServerListenThread(LPVOID pParam)
{
while(1)
Chat_Server.StartListenClient();
return 0;
}
Server::Server()
{
cout << " \tServer\n";
Chat_Server.connection_status = false;
WSADATA wsaData;
sockaddr_in local;
int wsaret=WSAStartup(0x101,&wsaData);
if(wsaret!=0)
{
return;
}
local.sin_family=AF_INET;
local.sin_addr.s_addr=INADDR_ANY;
local.sin_port=htons((u_short)8084);
m_SListenClient=socket(AF_INET,SOCK_STREAM,0);
if(m_SListenClient==INVALID_SOCKET)
{
return;
}
if(bind(m_SListenClient,(sockaddr*)&local,sizeof(local))!=0)
{
return;
}
if(listen(m_SListenClient,10)!=0)
{
return;
}
Chat_Server.connection_status = true;
return;
}
Server::~Server()
{
closesocket(m_SListenClient);
WSACleanup();
}
void Server::StartListenClient()
{
sockaddr_in from;
int fromlen=sizeof(from);
m_SClient=accept(m_SListenClient,
(struct sockaddr*)&from,&fromlen);
if(m_SClient != INVALID_SOCKET)
m_vClientList.push_back(m_SClient);
AfxBeginThread(ServerRecThread,(void *)m_SClient);
}
int Server::SendMessagePort(string Message)
{
int iStat = 0;
int No_Of_client;
list<SOCKET>::iterator itl;
No_Of_client= m_vClientList.size();
if(No_Of_client == 0)
return 0;
itl = m_vClientList.begin();
while(itl != m_vClientList.end())//send message to all client
{
iStat = send(*itl,Message.c_str(),Message.size()+1,0);
if(iStat == -1)
m_vClientList.remove(*itl);
++itl;
}
if(iStat == -1)
return 1;
return 0;
}
int Server::RecClient(SOCKET sRecSocket)
{
char Message[4096];
int iStat;
//cout <<inet_ntoa(local.sin_addr) <<":"<<temp<<"\r\n";
iStat = recv(sRecSocket,Message,4096,0);
if(iStat == -1)
{
m_vClientList.remove(sRecSocket);
return 1;
}
else
{
cout <<"-->\""<<Message<<"\"\n";
SendMessagePort(Message);
return 0;
}
return 0;
}
int main(int argc, char* argv[])
{
int nRetCode = 0;
char buf[4096];
cout << "|------------------------------------------|\n";
cout << "|A simple chat application based on sockets\n";
cout << "|Press ONLY ENTER to quit.\n";
cout << "|------------------------------------------|\n";
if(!Chat_Server.connection_status)//check "connection status"
{
cout<<"\nFailed to initialise server socket";
getch();
return 1;
}
AfxBeginThread(ServerListenThread,0);
while(gets(buf))
{
if(strlen(buf) == 0)
break;
if(Chat_Server.SendMessagePort(buf))//return 1 if can not send
{
cout<<"Problem in connecting to server. Check whether server is running\n";
break;
}
}
cout<<"This is clieant signing off.";
getch();
return nRetCode;
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
#include "chat_client.h"
//Global Message object
Client Chat_Client;
Client::Client()
{ cout<<"\tClient\n";
Chat_Client.connection_status = false;
}
void Client::Init(string sIpAddress, int iPort)
{
m_sServerIPAddress = sIpAddress;
m_iServerPort = iPort;
struct hostent *hp;
unsigned int addr;
struct sockaddr_in server;
WSADATA wsaData;
int wsaret=WSAStartup(0x101,&wsaData);
if(wsaret!=0)
{
return;
}
soc=socket(AF_INET,SOCK_STREAM,0);
if(soc==INVALID_SOCKET)
return;
addr=inet_addr("127.0.0.1");
hp=gethostbyaddr((char*)&addr,sizeof(addr),AF_INET);
if(hp==NULL)
{
closesocket(soc);
return;
}
server.sin_addr.s_addr=*((unsigned long*)hp->h_addr);
server.sin_family=AF_INET;
server.sin_port=htons(m_iServerPort);
/*if(connect(soc,(struct sockaddr*)&server,sizeof(server)))
{
closesocket(soc);
return;
}
*/
int bb=SOCKET_ERROR;
while(bb == SOCKET_ERROR)
{
bb=connect(soc,(struct sockaddr*)&server,sizeof(server));//this will connect our socket soc with the specifications above
// When there is no connection the return is SOCKET_ERROR
}
Chat_Client.connection_status = true;
return;
}
Client::~Client()
{
if(connection_status)
closesocket(soc);
}
int Client::SendMessagePort(string sMessage)
{
int iStat = 0;
iStat = send(soc,sMessage.c_str(),sMessage.size()+1,0);
if(iStat == -1)
return 1;
return 0;
}
int Client::RecMessagePort()
{
char acRetData[4096];
int iStat = 0;
iStat = recv(soc,acRetData,4096,0);
if(iStat == -1)
return 1;
cout<<":\""<<acRetData<<"\"\n";
return 0;
}
UINT MessageRecThread(LPVOID pParam)
{
while(1)
{
if(Chat_Client.RecMessagePort())
break;
}
return 0;
}
int main(int argc, char* argv[])
{
char buf[4096];
cout << "|-----------------------------------------|\n";
cout << "|A simple chat application based on sockets.\n";
cout << "|Press ONLY ENTER to quit.\n";
cout << "|-----------------------------------------|\n";
/* FILE *fp = fopen("server.ini","r");
if(fp == NULL)
{
cout<<"\nUnable to open server.ini. Please specify server IPsddress in server.ini";
return 1; // main failed
}
string sServerAddress;
while((fgets(buf,4096,fp)) != NULL)
{
if(buf[0] == '#')
continue;
sServerAddress = buf;
}
fclose(fp);
if(sServerAddress.size() == 0)
{
cout<<"\nUnable to find server IPaddress in server.ini";
cout<<"\nPlease set server IPaddress";
getch();
return 0;
}
*/
Chat_Client.Init("127.0.0.1",8084);
if(!Chat_Client.connection_status) //check "connection status"
{
cout<<"\nUnable to connect to the IPaddress specified in server.ini";
cout<<"\nPlease check server IPaddress";
getch();
return 0;
}
AfxBeginThread(MessageRecThread,0);
while(gets(buf))
{
if(strlen(buf) == 0)
break;
if(Chat_Client.SendMessagePort(buf))//if can not sen message
{
cout<<"Problem in connecting to server. Check whether server is running\n";
break;
}
}
cout<<"\nThis is server Signing off. BYE:";
getch();
return 0;
}بإنتظاااركم ..