基于Udp的Socket网络编程聊天程序
1.新建一个工程区Net
在工作区中添加两个工程 NetSrv 和 NetClient
为两个工程添加库文件 (Link中) ws2_32.lib
2.在工程NetSrv中添加Server.cpp文件
代码如下:
#include <WINSOCK2.H>
#include <stdio.h>
void main()
{
WORD wVersionRequested;
WSADATA wsaData;
int err;
wVersionRequested = MAKEWORD( 2, 2 );
err = WSAStartup( wVersionRequested, &wsaData );
if ( err != 0 )
{
return;
}
if ( LOBYTE( wsaData.wVersion ) != 2 || HIBYTE( wsaData.wVersion ) != 2 )
{
WSACleanup( );
return;
}
SOCKET sockSrv = socket(AF_INET,SOCK_DGRAM,0);
SOCKADDR_IN addrSrv;
addrSrv.sin_addr.S_un.S_addr = htonl(INADDR_ANY);
addrSrv.sin_family = AF_INET;
addrSrv.sin_port = htons(6000);
bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));
char recvBuf[100];
char sendBuf[100];
char tempBuf[200];
SOCKADDR_IN addrClient;
int len = sizeof(SOCKADDR);
while (1)
{
recvfrom(sockSrv , recvBuf, 100, 0, (SOCKADDR*)&addrClient,&len);
if ('q'==recvBuf[0])
{
sendto(sockSrv,"q",strlen("q")+1, 0 , (SOCKADDR*)&addrClient,len);
printf("Chat end!\n");
break;
}
sprintf(tempBuf,"%s say : %s",inet_ntoa(addrClient.sin_addr),recvBuf);
printf("%s\n",tempBuf);
printf("Please input data:\n");
gets(sendBuf);
sendto(sockSrv,sendBuf,strlen(sendBuf)+1,0,(SOCKADDR*)&addrClient,len);
}
closesocket(sockSrv);
WSACleanup();
}
3.在工程NetClient中添加Client.cpp文件
代码如下:
#include <WINSOCK2.H>
#include <stdio.h>
void main()
{
WORD wVersionRequested;
WSADATA wsaData;
int err;
wVersionRequested = MAKEWORD( 2, 2 );
err = WSAStartup( wVersionRequested, &wsaData );
if ( err != 0 )
{
return;
}
if ( LOBYTE( wsaData.wVersion ) != 2 ||HIBYTE( wsaData.wVersion ) != 2 )
{
WSACleanup();
return;
}
SOCKET sockClient = socket(AF_INET,SOCK_DGRAM,0);
SOCKADDR_IN addrSrv;
addrSrv.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
addrSrv.sin_family=AF_INET;
addrSrv.sin_port = htons(6000);
char recvBuf[100];
char sendBuf[100];
char tempBuf[200];
int len = sizeof(SOCKADDR);
while (1)
{
printf("Please input data:\n");
gets(sendBuf);
sendto(sockClient,sendBuf,strlen(sendBuf)+1,0,(SOCKADDR*)&addrSrv,len);
recvfrom(sockClient,recvBuf,100,0,(SOCKADDR*)&addrSrv,&len);
if ('q' == recvBuf[0])
{
sendto(sockClient,"q",strlen("q")+1,0,(SOCKADDR*)&addrSrv,len);
printf("Chat end!\n");
break;
}
sprintf(tempBuf,"%s say : %s",inet_ntoa(addrSrv.sin_addr),recvBuf);
printf("%s\n",tempBuf);
}
closesocket(sockClient);
WSACleanup();
}
4.先运行服务端程序,再运行客户端程序
可以聊天了,但是只能客户端发一句,服务端发一句,比较呆板
基于Udp的Socket网络编程聊天程序相关推荐
- Socket网络编程--聊天程序(8)
上一节已经完成了对用户的身份验证了,既然有了验证,那么接下来就能对不同的客户端进行区分了,所以这一节讲实现私聊功能.就是通过服务器对客户端的数据进行转发到特定的用户上, 实现私聊功能的聊天程序 实现的 ...
- 基于Udp的Socket网络编程
1.新建一个工作空间 Udp 添加两个工程UdpClient 和 UdpSrv 2.在工程UdpSrv中添加UdpSrv.cpp文件 代码如下: #include <Winsock2.h> ...
- Socket网络编程--聊天程序(3)
上一小节,已经讲到可以每个人多说话,而且还没有限制,简单的来说,我们已经完成了聊天的功能了,那么接下来我们要实现什么功能呢?一个聊天程序至少应该支持一对多的通讯吧,接下来就实现多个客户端往服务器发送数 ...
- Socket网络编程--聊天程序(2)
上一节简单如何通过Socket创建一个连接,然后进行通信.只是每个人只能说一句话.而且还是必须说完才会接收到信息,总之是很不方便的事情.所以这一小节我们将对上一次的程序进行修改,修改成每个人可以多说话 ...
- 基于Linux的socket网络编程项目——游侠手机商城
基于Linux的socket网络编程项目--游侠手机商城 一.项目说明 二.项目使用的技术 三.客户端搭建 四.服务器端搭建 一.项目说明 本项目是一个仿真手机商城类系统,基本功能: 登录界面功能:用 ...
- socket网络编程 java_Java Web 基础(一) 基于TCP的Socket网络编程
一.Socket简单介绍 Socket通信作为Java网络通讯的基础内容,集中了异常.I/O流模式等众多知识点.学习Socket通信,既能够了解真正的网络通讯原理,也能够增强对I/O流模式的理解. 1 ...
- step5 . day4 网络编程 基于UDP协议的网络编程流程及API
UDP协议是面向无连接,不可靠的传输协议,编程流程如下; 服务器端: 1. socket(),返回一个文件描述符,用于通信 2. bind(); //得先完成结构体的填充sockaddr_in 3. ...
- 基于TCP的Socket网络编程,有图有代码
1.新建一个工作区 Tcp 在工作区中添加两个工程 TcpSrv(服务端)和TcpClient (客户端) 2.在工程TcpSrv添加TcpSrv.cpp文件 代码如下: #include <W ...
- Day09: socket网络编程-OSI七层协议,tcp/udp套接字,tcp粘包问题,socketserver
今日内容:socket网络编程 1.OSI七层协议 2.基于tcp协议的套接字通信 3.模拟ssh远程执行命令 4.tcp的粘包问题及解决方案 5.基于udp协 ...
最新文章
- 5分钟掌握手动优化机器学习模型超参数
- python sqlite数据库一对多_Python:使用sqlite3进行多处理
- 运维岗位技能风向标!
- 【练习】c++删除链表倒数第K个结点和 插入排序算法将单链表递增排序
- router-link-active 和 router-link-exact-active router-link-active
- weex监听android返回键,weex使用手册
- [Unity] FlowCanvas 使用注意事项
- 【转】Android SDK Manager 更新方法
- 深入分析Ribbon源码分析
- 第一次写CSDN的博客
- GAEA Winsieve v1.2 1CD(快速输入和打印结晶粒度分析曲线)
- 用PyTorch完成手写数字识别
- win10系统WiFi突然消失打不开,终极解决方法
- FATAL: kernel too old
- 什么是AWS Athena
- 简析BlockingQueue
- 微信惊现超级大Bug:试过的人都哭了...
- 父母不要对孩子说的10句话
- web前端:波浪舞动开机动画loading,原生css、js,@keyframes应用
- Log of Grade Two
热门文章
- ECMAScript:客户端脚本语言的标准
- google python代码规范_Python代码这样写才规范优雅! (二)
- JavaScript中循环遍历JSON响应
- 前端学成什么样就能找工作了?
- Web 前端怎样入门?
- php 简单的socket,【技术产品】PHP如何实现简单的Socket
- 如何修改influxdb表结构_influxdb基本操作
- spring 事务_极限 Spring (4) Spring 事务
- 编辑器未包含main类型_Shopify模版编辑器问题排查及解决办法汇总
- jp在java中无法编译_为什么我的JAVA程序无法编译呢?