#include
#include
#include
#pragma comment(lib, "ws2_32.lib")
using namespace std;
//头文件包含
int main()
{ int recvbytes;
char temp[100];
char a[100]; //一些变量的声明
WORD wVersionRequested;
WSADATA wsaData;
SOCKET sock_id, client_id; //定义两个套接字
struct sockaddr_in serv_addr, remote_addr; //定义两个结构
wVersionRequested = MAKEWORD(2, 0); //这个是固定用法 版本
if (0 != WSAStartup(wVersionRequested, &wsaData)) //此处初始化socke库
{
cout << "加载Winsock库出错!" << endl;
exit(1);
}
if (-1 == (sock_id = socket(AF_INET, SOCK_STREAM, 0))) //建立一个类型为TCP的套接字
{
cout << "创建套接字出错!" << endl;
exit(1);
}
//填充结构体内容
serv_addr.sin_family = AF_INET; //固定
serv_addr.sin_port = htons(800); //端口
serv_addr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1"); //ip
memset(&(serv_addr.sin_zero), 0, sizeof(serv_addr.sin_zero));//其他填充为零
//绑定到套接字描述符
if (SOCKET_ERROR == bind(sock_id, (struct sockaddr *)&serv_addr, sizeof(struct sockaddr)))
{
cout << "1出错!" << endl;
exit(1);
}
//开始监听
if (SOCKET_ERROR == listen(sock_id, 5))
{
cout << "2出错!" << endl;
exit(1);
}
//如果来了一个连接请求 处理输入后发送给对方 输入的东东
int sin_size = sizeof(struct sockaddr_in);
if (SOCKET_ERROR == (client_id = accept(sock_id, (struct sockaddr *)&remote_addr, &sin_size)))
{
cout << "3出错!" << endl;
exit(1);
}
cout<<"连接到一个客户端!!!请发送消息给他!!!"<
{ cin>>a;
send(client_id, a, strlen(a), 0); //把输入的东东发送出去
if (ERROR_SUCCESS == (recvbytes = recv(client_id, temp, 100, 0))) //接收数据到temp缓冲区
{
cout << "接受数据出错!" << endl;
exit(1);
}
temp[recvbytes] = '\0';
cout << temp << endl;
if(temp[0]!='8')
continue;
else
break;
}
closesocket(client_id); //关闭套接字
closesocket(sock_id); //关闭套接字
WSACleanup(); //清理套接字库等收尾工作
system("pause"); //暂停
return 0;
}
#include
#include
#include
#pragma comment(lib, "ws2_32.lib") // 库
using namespace std;
int main()
{ int recvbytes;
char temp[100];
char a[100];
WORD wVersionRequested;
WSADATA wsaData;
SOCKET sock_id, client_id;
struct sockaddr_in serv_addr, remote_addr;
wVersionRequested = MAKEWORD(2, 0); // 版本号,2.0的socket
if (0 != WSAStartup(wVersionRequested, &wsaData)) // 全局初始化
{
cout << "加载Winsock库出错!" << endl;
exit(1);
}
if (-1 == (sock_id = socket(AF_INET, SOCK_STREAM, 0))) // 创建一个TCP的socket
{
cout << "创建套接字出错!" << endl;
exit(1);
}
// 填充一个 socket 地址
serv_addr.sin_family = AF_INET;
serv_addr.sin_port = htons(800); // 端口800
serv_addr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1"); // 地址是本机
memset(&(serv_addr.sin_zero), 0, sizeof(serv_addr.sin_zero));
// 绑定刚刚创建的 socket 到这个地址
if (SOCKET_ERROR == bind(sock_id, (struct sockaddr *)&serv_addr, sizeof(struct sockaddr)))
{
cout << "1出错!" << endl;
exit(1);
}
// 监听
if (SOCKET_ERROR == listen(sock_id, 5))
{
cout << "2出错!" << endl;
exit(1);
}
int sin_size = sizeof(struct sockaddr_in);
// 如果有客户端连接(不是错误则继续)
if (SOCKET_ERROR == (client_id = accept(sock_id, (struct sockaddr *)&remote_addr, &sin_size)))
{
cout << "3出错!" << endl;
exit(1);
}
cout<<"连接到一个客户端!!!请发送消息给他!!!"<
{ cin>>a;
// 发送数据
send(client_id, a, strlen(a), 0);
//接收数据
if (ERROR_SUCCESS == (recvbytes = recv(client_id, temp, 100, 0)))
{
cout << "接受数据出错!" << endl;
exit(1);
}
temp[recvbytes] = '\0';
cout << temp << endl;
// 当客户端输入的第一个字符为8的时候断开连接 , 否则继续聊天..
if(temp[0]!='8')
continue;
else
break;
}
//一些收尾工作..
closesocket(client_id);
closesocket(sock_id);
WSACleanup();
system("pause");
return 0;
}