大神请指点一上关于网络编程服务器和客户端连接的有关问题
大神请指点一下关于网络编程服务器和客户端连接的问题
老师让写一个服务器和客户端实现类似聊天室的程序,这是我初步写的,但是怎么服务器和客户端却没法连接?还有如果只要在一台Pc机上写,服务器和客户端IP 应该怎么设置?
CLIENT.CPP
#include"stdafx.h"
#include<iostream>
#include "winsock2.h"
#include <stdio.h>
#pragma comment(lib,"ws2_32.lib")
#include<iostream>
using namespace std;
int main(int argc,char **argv)
{
int err;
WORD versionRequired;
WSADATA wsaData;
versionRequired=MAKEWORD(2,0);
err=WSAStartup(versionRequired,&wsaData);//协议库的版本信息
if (!err){
printf("客户端嵌套字已经打开!\n");
}
else{
printf("ERROR:客户端的嵌套字打开失败!\n");
return 1;//结束
}
//创建套接字
SOCKET clientSocket=socket(AF_INET,SOCK_STREAM,0);//用于发送数据
//套接字的绑定
SOCKADDR_IN severaddr_in;//接受服务器的网络地址
severaddr_in.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");
severaddr_in.sin_family=AF_INET;
severaddr_in.sin_port=htons(6000);
int t1= bind(clientSocket,(SOCKADDR*)&severaddr_in,sizeof(SOCKADDR));//注意第三个参数
if(t1==SOCKET_ERROR)
{
cout<<"绑定失败\n";
}
//套接字的连结:将两个套接字连结起来准备通信
//listen(clientSocket,5);
int t2= connect(clientSocket,(SOCKADDR*)&severaddr_in,sizeof(SOCKADDR));
if(t2==SOCKET_ERROR)
{
cout<<"连接失败\n";
}
//开始连接
if(true){
//套接字发送数据
char buf[100];
scanf("%s",buf);
int t=send(clientSocket,buf,strlen(buf),0);
if(t==SOCKET_ERROR){
//错误处理
printf("clinet 发送失败\n");
}
//printf("Send:%s\n","hello,this is client");
// send(clientSocket,buf,sizeof(buf),0);
//套接字的数据接收
char receiveBuf[100];//为接收的数据准备缓冲区
recv(clientSocket,receiveBuf,100,0);
printf("Recv:%s\n",receiveBuf);
//关闭套接字:释放所占有的资源
closesocket(clientSocket);
WSACleanup();
}
return 0;
}
//***************************************************************************
Sever.cpp
#include"stdafx.h"
#include<iostream>
#include "winsock2.h"
#include <stdio.h>
#pragma comment(lib,"ws2_32.lib")
#include<iostream>
using namespace std;
int main(int argc,char **argv)
{
//启动Winsock
WORD myVersionRequest;
WSADATA wsaData;
myVersionRequest=MAKEWORD(1,1);
int err;
err=WSAStartup(myVersionRequest,&wsaData);//通过WSAStartup函数完成对Winsock服务的初始化,
//第一个参数指明程序请求使用的Socket版本
//wVersionRequested:一个WORD(双字节)型数值,指定了应用程序需要使用的Winsock规范的最高版本。
//第二个参数返回请求的Socket的版本信息,返回给wsaData
//wsaData指向WSADATA数据结构的指针,用来接收Windows Sockets实现的细节。
老师让写一个服务器和客户端实现类似聊天室的程序,这是我初步写的,但是怎么服务器和客户端却没法连接?还有如果只要在一台Pc机上写,服务器和客户端IP 应该怎么设置?
CLIENT.CPP
#include"stdafx.h"
#include<iostream>
#include "winsock2.h"
#include <stdio.h>
#pragma comment(lib,"ws2_32.lib")
#include<iostream>
using namespace std;
int main(int argc,char **argv)
{
int err;
WORD versionRequired;
WSADATA wsaData;
versionRequired=MAKEWORD(2,0);
err=WSAStartup(versionRequired,&wsaData);//协议库的版本信息
if (!err){
printf("客户端嵌套字已经打开!\n");
}
else{
printf("ERROR:客户端的嵌套字打开失败!\n");
return 1;//结束
}
//创建套接字
SOCKET clientSocket=socket(AF_INET,SOCK_STREAM,0);//用于发送数据
//套接字的绑定
SOCKADDR_IN severaddr_in;//接受服务器的网络地址
severaddr_in.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");
severaddr_in.sin_family=AF_INET;
severaddr_in.sin_port=htons(6000);
int t1= bind(clientSocket,(SOCKADDR*)&severaddr_in,sizeof(SOCKADDR));//注意第三个参数
if(t1==SOCKET_ERROR)
{
cout<<"绑定失败\n";
}
//套接字的连结:将两个套接字连结起来准备通信
//listen(clientSocket,5);
int t2= connect(clientSocket,(SOCKADDR*)&severaddr_in,sizeof(SOCKADDR));
if(t2==SOCKET_ERROR)
{
cout<<"连接失败\n";
}
//开始连接
if(true){
//套接字发送数据
char buf[100];
scanf("%s",buf);
int t=send(clientSocket,buf,strlen(buf),0);
if(t==SOCKET_ERROR){
//错误处理
printf("clinet 发送失败\n");
}
//printf("Send:%s\n","hello,this is client");
// send(clientSocket,buf,sizeof(buf),0);
//套接字的数据接收
char receiveBuf[100];//为接收的数据准备缓冲区
recv(clientSocket,receiveBuf,100,0);
printf("Recv:%s\n",receiveBuf);
//关闭套接字:释放所占有的资源
closesocket(clientSocket);
WSACleanup();
}
return 0;
}
//***************************************************************************
Sever.cpp
#include"stdafx.h"
#include<iostream>
#include "winsock2.h"
#include <stdio.h>
#pragma comment(lib,"ws2_32.lib")
#include<iostream>
using namespace std;
int main(int argc,char **argv)
{
//启动Winsock
WORD myVersionRequest;
WSADATA wsaData;
myVersionRequest=MAKEWORD(1,1);
int err;
err=WSAStartup(myVersionRequest,&wsaData);//通过WSAStartup函数完成对Winsock服务的初始化,
//第一个参数指明程序请求使用的Socket版本
//wVersionRequested:一个WORD(双字节)型数值,指定了应用程序需要使用的Winsock规范的最高版本。
//第二个参数返回请求的Socket的版本信息,返回给wsaData
//wsaData指向WSADATA数据结构的指针,用来接收Windows Sockets实现的细节。