我是在Visual Stdio 2013两人的建立project。编译如下两个人main文件,然后测试

服务器:Server.cpp

#include <WINSOCK2.H>

#include <iostream>
using std::cout;
using std::cin;
using std::endl; #include <string>
using std::string; #pragma comment(lib,"ws2_32.lib") void main()
{
//创建套接字
WORD myVersionRequest;
WSADATA wsaData; //包括系统所支持的WinStock版本号信息
myVersionRequest = MAKEWORD(1, 1); //初始化版本号1.1
int err;
err = WSAStartup(myVersionRequest, &wsaData);
if (!err){
printf("已打开套接字\n");
}
else{
//进一步绑定套接字
printf("套接字未打开!");
return;
}
SOCKET serSocket = socket(AF_INET, SOCK_STREAM, 0);//创建了可识别套接字
//须要绑定的參数
SOCKADDR_IN addr;
addr.sin_family = AF_INET;
addr.sin_addr.S_un.S_addr = htonl(INADDR_ANY);//ip地址
addr.sin_port = htons(3000);//绑定端口
//将套接字绑定到指定的网络地址
bind(serSocket, (SOCKADDR*)&addr, sizeof(SOCKADDR));//绑定完毕
listen(serSocket, 10); //第二个參数代表可以接收的最多的连接数
SOCKADDR_IN clientsocket;
int len = sizeof(SOCKADDR);
SOCKET serConn;
//等待客户端的连接
serConn = accept(serSocket, (SOCKADDR*)&clientsocket, &len);
cout << "客户端" << inet_ntoa(clientsocket.sin_addr) << "已连接" << endl; //客户端已连接
while (1) {
char sendBuf[100];
sprintf(sendBuf, "server : welcome %s to server.", inet_ntoa(clientsocket.sin_addr));
//在相应的IP处而且将这行字打印到那里
send(serConn, sendBuf, strlen(sendBuf) + 1, 0);
char receiveBuf[100];
//接收客户端传来的信息
recv(serConn, receiveBuf, strlen(receiveBuf) + 1, 0);
char* quit = "quit";
//假设客户端传来了quit信号,则服务端关闭,客户端也关闭
if (!strcmp(receiveBuf, quit)) {
break;
}
printf("%s\n", receiveBuf);
}
closesocket(serConn); //关闭
WSACleanup(); //释放资源的操作
}

客户端:Client.cpp

#include <WINSOCK2.H>

#include <iostream>
using std::cout;
using std::cin;
using std::endl;
#include <string>
using std::string;
#include <conio.h> #pragma comment(lib,"ws2_32.lib") void main()
{
int err;
WORD versionRequired;
WSADATA wsaData; //包括系统所支持的WinStock版本号信息
versionRequired = MAKEWORD(1, 1); //初始化版本号1.1
//注冊WinStock,返回状态
err = WSAStartup(versionRequired, &wsaData);//协议库的版本号信息
if (!err) //返回结果为0表示初始化失败
{
cout << LPSTR("客户端套接字已经打开!\n");
}
else
{
//调用WSAGetLastError()查看错误信息
cout << ("客户端套接字打开失败:") << WSAGetLastError() << endl;
return;//结束
}
/*
创建套接字:
流式套接字: SOCK_STREAM , IPPROTO_TCP
数据报套接字: SOCK_DGRAM , IPPROTO_UDP
*/
SOCKET clientSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); //创建流式套接字
SOCKADDR_IN clientsock_in; //专门针对Internet 通信域的Winsock地址结构
clientsock_in.sin_addr.S_un.S_addr = inet_addr("127.0.0.1"); //通过inet_addr结构指定套接字的主机IP地址
clientsock_in.sin_family = AF_INET; //指定协议家族:AF_INET
clientsock_in.sin_port = htons(3000); //指定将要分配给套接字的传输层端口号:6000 int fail = connect(clientSocket, (SOCKADDR*)&clientsock_in, sizeof(SOCKADDR));//開始连接
if (fail){
cout << "与服务端连接失败。程序将退出..." << endl;
_getch();
return;
}
string s;
while (cin >> s){
char receiveBuf[100];
//接收数据
recv(clientSocket, receiveBuf, 101, 0);
cout << receiveBuf <<endl;
//发送数据
send(clientSocket, s.c_str(), s.length() + 1, 0);
if (s == "quit"){
break;
}
}
closesocket(clientSocket);
//关闭套接字
if (WSACleanup() == SOCKET_ERROR){
cout << "套接字关闭失败:" << WSAGetLastError() << endl;
}
else{
cout << "套接字成功关闭." << endl;
}
_getch();
return;
}
//inet_addr结构:
/*
Struct in_addr {
Union{
Struct{ u_char s_b1, s_b2, s_b3, s_b4; } S_un_b;
Struct{ u_short s_w1, s_w2; } S_un_w;
U_long S_addr;
}
}
*/

測试



客户端输入quit后,客户端和服务端则均可正常退出;否则,仅仅关闭客户端,服务端会陷入无限循环输出最后传送的数据(可叉掉)。

备注:

  • 不能支持中文传送数据(会有乱码)。
  • 在客户端输入有空格的数据时,会被当成多次输入数据(由于是使用cin读取的数据)

版权声明:本文博客原创文章,博客,未经同意,不得转载。

【Socket计划】使用C++实现Server结束Client结束的更多相关文章

  1. TCP/UDP Socket调试工具提供了TCP Server,TCP Client,UDP Server,UDP Client,UDP Group 五种Socket调试方案。

    一.TCP通信测试: 1)   创建TCP Server: 选中左方的TCP Server, 然后点击”创建”按钮,软件弹出监听端口输入框 输入监听端口后,即创建了一个在指定端口上进行监听的TCP S ...

  2. C Socket Programming for Linux with a Server and Client Example Code

    Typically two processes communicate with each other on a single system through one of the following ...

  3. Android简单实现Socket通信,client连接server后,server向client发送文字数据

    案例实现的是简单的Socket通信,当client(Androidclient)连接到指定server以后,server向client发送一句话文字信息(你能够拓展其他的了) 先看一下服务端程序的实现 ...

  4. Netty4.0学习笔记系列之一:Server与Client的通讯

    http://blog.csdn.net/u013252773/article/details/21046697 本文是学习Netty的第一篇文章,主要对Netty的Server和Client间的通讯 ...

  5. socket计划编制的原则

    socket编程原理 1.问题的引入 1) 普通的I/O操作过程: UNIX系统的I/O命令集,是从Maltics和早期系统中的命令演变出来的,其模式为打开一读/写一关闭(open-write-rea ...

  6. socket计划——一个简单的例子

    从一个简单易用TCP样品开始socket计划,的基本过程例如下列: server                                                  client +++ ...

  7. python socket编程入门(编写server实例)-乾颐堂

    python 编写server的步骤: 1. 第一步是创建socket对象.调用socket构造函数.如: socket = socket.socket( family, type ) family参 ...

  8. python socket编程入门(编写server实例)+send 与sendall的区别与使用方法

    python 编写server的步骤: 1. 第一步是创建socket对象.调用socket构造函数.如: socket = socket.socket( family, type ) family参 ...

  9. ESP8266开发之旅 网络篇⑦ TCP Server & TCP Client

    授人以鱼不如授人以渔,目的不是为了教会你具体项目开发,而是学会学习的能力.希望大家分享给你周边需要的朋友或者同学,说不定大神成长之路有博哥的奠基石... QQ技术互动交流群:ESP8266&3 ...

随机推荐

  1. ASP.NET MVC 5 入门摘要

    翻译和编辑的第一阶段后,.我们已经发出12片ASP.NET MVC 5入门文章. 他们中的大多数来自翻译ASP.NET MVC 5 官方教程,因为本系列文章言简意赅,篇幅适中,从一个web站点演示样例 ...

  2. [渣译文] SignalR 2.0 系列:SignalR的高频实时通讯

    原文:[渣译文] SignalR 2.0 系列:SignalR的高频实时通讯 英文渣水平,大伙凑合着看吧…… 这是微软官方SignalR 2.0教程Getting Started with ASP.N ...

  3. android v7兼容包RecyclerView的使用(四)——点击事件的不同方式处理

    前三篇文章 android v7兼容包RecyclerView的使用(三)--布局管理器的使用 android v7兼容包RecyclerView的使用(二) android v7兼容包Recycle ...

  4. Akka.NET是Java/Scala 流行框架Akka的一个 .NET 开源移植

    Akka.NET v1.0 已发布,支持Mono Akka.NET 是Java/Scala 流行框架Akka的一个 .NET 开源移植.可用于构建高并发,分布式和容错事件驱动的应用在 .NET 和 M ...

  5. Visual Studio 连接不上NuGet 官方程序包源的解决办法

    修改dns 即可

  6. 11gR2 Database Services for &quot;Policy&quot; and &quot;Administrator&quot; Managed Databases (文件 ID 1481647.1)

    In this Document   _afrLoop=1459311711568804&id=1481647.1&displayIndex=6&_afrWindowMode= ...

  7. Notification和Activity交互

    概述 通知(Notification)就是程序在不影响用户操作的情况下,通过手机顶部弹出消息告诉用户的一种信息通知方式,而且能够通过下拉通知操作抽屉通知,实现Notification与活动.通知和服务 ...

  8. Paypal-Express Checkout快捷支付方式的android端开发心得(二)

    一.前导 上一篇讲的不是非常好,这里再又一次讲一下. Paypal手机支付有2种形式: 1.Mobile Express Checkout,MEC,快捷支付 2.MPL 假设採用MEC支付方式,这样的 ...

  9. x264 - open gop and closed gop

    GOP - Group of picture(影像集团),它指的是两个I帧之间的距离. Reference(基准期).  它指的是两个P帧之间的距离. 简而言之, 跨参考gop的,变open gop: ...

  10. state-of-the-art implementations related to visual recognition and search

    http://rogerioferis.com/VisualRecognitionAndSearch2014/Resources.html Source Code Non-exhaustive lis ...