TCP通信聊天服务端和客户端(C/C++语言开发)附完整源码
距离上次学Python写的Python实现简单聊天室已经过去好久了,现在学c++又写了一遍,其实过程差不多,无非是语法的变化,目前仅实现最简单的一对一的通信,然后改就是了,接下来应该是多线程了,话不多说直接贴上源码;
一、服务端源码
#include <stdio.h>
#include <arpa/inet.h>
// #include <sys/types.h>
// #include <sys/socket.h>
#include <netinet/in.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
int main(){
//1、socket
int sfd = socket(AF_INET, SOCK_STREAM, 0);
if (sfd == -1){
perror("socket");
exit(-1);
}
// 2、bind ip and port
struct sockaddr_in saddr; //专用socket地址
saddr.sin_family = PF_INET;//协议族,ipv4的AF_INET也可以
// inet_pton(AF_INET, "192.168.193.128", saddr.sin_addr.s_addr);
saddr.sin_addr.s_addr = INADDR_ANY; // 监听所有外网接口, INADDR_ANY = 0
saddr.sin_port = htons(9999);//绑定的服务端口9999
int ret = bind(sfd, (struct sockaddr *)&saddr, sizeof(saddr));
if (ret == -1){
perror("bind");
exit(-1);
}
// 3、listen
ret = listen(sfd, 128);
if (ret == -1){
perror("listen");
exit(-1);
}
// 4、accept
struct sockaddr_in client_addr;
socklen_t addrlen = sizeof(client_addr);//客户端socket地址的大小
int newfd = accept(sfd, (struct sockaddr *)&client_addr, &addrlen);
if (newfd == -1){
perror("accept");
exit(-1);
}
// output connect message
char clientIP[16];
inet_ntop(AF_INET, &client_addr.sin_addr.s_addr, clientIP, sizeof(clientIP));
unsigned short clientPort = ntohs(client_addr.sin_port);
printf("client %s:%d is connect. \n", clientIP, clientPort);
// 5、recv and send
char recvBuf[1024] = {0};
while(1){
memset(recvBuf, 0, sizeof(recvBuf)); //clear buffer
int num = read(newfd, recvBuf, sizeof(recvBuf));//read datas
if (num == -1){
perror("read");
exit(-1);
} else if (num > 0){
printf("client message : %s\n", recvBuf);
} else if (num == 0){
printf("server close.");
break;
}
char respondData[] = "Your message is receive,thanks!";
write(newfd, respondData, sizeof(respondData));
}
// 6、close
close(sfd);
close(newfd);
return 0;
}
二、客户端源码
#include <stdio.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <string.h>
#include <stdlib.h>
int main() {
// 1.创建套接字
int fd = socket(AF_INET, SOCK_STREAM, 0);
if(fd == -1) {
perror("socket");
exit(-1);
}
// 2.连接服务器端
struct sockaddr_in serveraddr;
serveraddr.sin_family = AF_INET;
inet_pton(AF_INET, "192.168.223.128", &serveraddr.sin_addr.s_addr);
serveraddr.sin_port = htons(9999);
int ret = connect(fd, (struct sockaddr *)&serveraddr, sizeof(serveraddr));
if(ret == -1) {
perror("connect");
exit(-1);
}
// 3. 通信
char recvBuf[1024] = {0};
char client_data[1024];// 从键盘输入,给客户端发送数据
while(1) {
memset(client_data, 0, sizeof(client_data));
printf("请输入发送数据:");
scanf("%s", client_data);
write(fd, client_data, strlen(client_data));
sleep(1);
int ret = read(fd, recvBuf, sizeof(recvBuf));
if(ret == -1) {
perror("read");
exit(-1);
} else if(ret > 0) {
printf("server message : %s\n", recvBuf);
} else if(ret == 0) {
printf("server closed...\n");
break;
}
}
// 关闭连接
close(fd);
return 0;
}
三、效果
服务端:

客户端:

TCP通信聊天服务端和客户端(C/C++语言开发)附完整源码的更多相关文章
- QTcpSocket-Qt使用Tcp通讯实现服务端和客户端
版权声明:若无来源注明,Techie亮博客文章均为原创. 转载请以链接形式标明本文标题和地址: 本文标题:QTcpSocket-Qt使用Tcp通讯实现服务端和客户端 本文地址:https:// ...
- TCP中的服务端与客户端的实现
TCP中首先要在服务端开启监听,这样才可以从客户端链接 using System; using System.Collections.Generic; using System.Linq; using ...
- C#Winform窗体实现服务端和客户端通信例子(TCP/IP)
Winform窗体实现服务端和客户端通信的例子,是参考这个地址 http://www.cnblogs.com/longwu/archive/2011/08/25/2153636.html 进行了一些异 ...
- [C语言]一个很实用的服务端和客户端进行TCP通信的实例
本文给出一个很实用的服务端和客户端进行TCP通信的小例子.具体实现上非常简单,只是平时编写类似程序,具体步骤经常忘记,还要总是查,暂且将其记下来,方便以后参考. (1)客户端程序,编写一个文件clie ...
- 【转】TCP/UDP简易通信框架源码,支持轻松管理多个TCP服务端(客户端)、UDP客户端
[转]TCP/UDP简易通信框架源码,支持轻松管理多个TCP服务端(客户端).UDP客户端 目录 说明 TCP/UDP通信主要结构 管理多个Socket的解决方案 框架中TCP部分的使用 框架中UDP ...
- 使用WebSocket实现服务端和客户端的通信
开发中经常会有这样的使用场景.如某个用户在一个数据上做了xx操作, 与该数据相关的用户在线上的话,需要实时接收到一条信息. 这种可以使用WebSocket来实现. 另外,对于消息,可以定义一个类进行固 ...
- Netty 学习(二):服务端与客户端通信
Netty 学习(二):服务端与客户端通信 作者: Grey 原文地址: 博客园:Netty 学习(二):服务端与客户端通信 CSDN:Netty 学习(二):服务端与客户端通信 说明 Netty 中 ...
- (C#:Socket)简单的服务端与客户端通信。
要求:1.可以完成一对一的通信:2.实现服务端对客户端一对多的选择发送:3.可以实现服务端的群发功能:4.可以实现客户端文件的发送: 要点:服务器端:第一步:用指定的端口号和服务器的ip建立一个End ...
- vertx 从Tcp服务端和客户端开始翻译
写TCP 服务器和客户端 vert.x能够使你很容易写出非阻塞的TCP客户端和服务器 创建一个TCP服务 最简单的创建TCP服务的方法是使用默认的配置:如下 NetServer server = ve ...
- C# Socket服务端与客户端通信(包含大文件的断点传输)
步骤: 一.服务端的建立 1.服务端的项目建立以及页面布局 2.各功能按键的事件代码 1)传输类型说明以及全局变量 2)Socket通信服务端具体步骤: (1)建立一个Socket (2)接收 ...
随机推荐
- 配置RMAN(缩减版)
配置备份的默认类型:备份集或副本 要配置默认备份类型: 启动 RMAN 并连接到目标数据库和恢复目录(如果使用). 将备份集或映像副本配置为默认备份类型. 以下示例配置磁盘备份到副本和备份集的备份类型 ...
- lua中定义变量用and和or连接
原文链接 最近在写代码中看到lua定义变量有local a = value1 and value2的操作,有些疑问,在此记录一下:当连接两个操作数时,1.对于运算符and,假设它的第一个操作数为假,就 ...
- Unity多线程使用(线程池)
1.在C#中使用线程池需要以下这个类库using System.Threading 2.开单个线程(unity程序停止前 线程一定要关闭) private Thread tempThread; voi ...
- kafka常用命令(zookeeper与bootstrap-server)
在 0.9.0.0 之后的 Kafka,出现了几个新变动,一个是在 Server 端增加了 GroupCoordinator 这个角色,另一个较大的变动是将 topic 的 offset 信息由之前存 ...
- C# 以管理员方式运行程序
让你的程序以管理员方式运行 在Program.cs文件中添加如下代码 /// <summary> /// 应用程序的主入口点. /// </summary> [STAThrea ...
- MFC编辑框字符显示时无法换行的问题解决
字符串结尾加上"\r\n": 编辑框属性设置:Auto HScroll为False,Multiline为True,Want Return为True.
- 20191317 Exp2-后门原理与实践
20191317 Exp2-后门原理与实践 实验基础 本次实验需要我们掌握后门的基础知识,学习使用nc实现Windows,Linux之间的后门连接,学习使用Metaspolit的msfvenom指令生 ...
- Tomcat put 漏洞批量工具
工具下载 https://share.weiyun.com/96ffd3bf26b09ffece8d01317f3b3efb
- css3边框属性学习
1.boder-radius <!DOCTYPE html> <html> <head> <meta charset="utf-8" /& ...
- NIO基本介绍
同步和异步,同步指的是应用程序会直接参与IO读写操作,用阻塞或者长轮询的方式来获取数据.异步指的是IO交给操作系统,完成IO读写后通知程序,程序直接拿走数据. BIO:同步阻塞式IO,服务器实现模式为 ...