资源简介
这个程序是在window下用c编写的socket基于多线程的程序,程序能够完美运行,并且程序注解也是很清楚的哦!Liunx版本的c编写的socket多线程的聊天室也是有的,程序中有可直接执行的exe文件方便大家测试。
代码片段和文件信息
//加载头文件
#include
#include
#include
#pragma comment(lib“ws2_32.lib“)
#include
//定义一些常量
#define PORT 8585
//输入输出的一些内容的字符长度
#define MAX_SIZE 1000
SOCKET fd;//客户端fd
//发送和接受的信息
char sendbuf[1024];
char recvbuf[1024];
SOCKET create_connection(){
//创建socket AF_INET是ipv4d
SOCKET socket_cliet = socket(AF_INET SOCK_STREAM IPPROTO_TCP);
//判断是否可以创建socket
if(socket == INVALID_SOCKET){
printf(“socket_cliet 创建失败 \n“);
exit(1);//错误退出
}
//构造一个客户端的地址
struct sockaddr_in client;
//ipv4的地址
client.sin_family = AF_INET;
client.sin_addr.s_addr =inet_addr(“192.168.43.158“);
client.sin_port = htons(PORT);
//进行连接
if(connect(socket_cliet (struct sockaddr *)&clientsizeof(struct sockaddr)) == SOCKET_ERROR){
printf(“客户端连接失败,未找到服务器,请确保服务器先开启\n“);
//关闭socket
closesocket(socket_cliet);
//退出程序
exit(1);
}
return socket_cliet;
}
//这是一个线程处理的函数,用来接受服务器传来的信息
void recvinfo(void* ptr)
{
while(1)
{
//对信息进行处理清空 可以接受下一个内容
if ((recv(fdrecvbufMAX_SIZE0))==-1){
printf(“服务器故障5555555555555555 已退出客户端\n“);
exit(1);
}
//打印出该结束的信息
printf(“%s“recvbuf);
//清空缓存
memset(recvbuf0sizeof(recvbuf));
}
}
int main()
{
//开启socket服务的函数
WORD sockVersion = MAKEWORD(2 2);
WSADATA data;
if (WSAStartup(sockVersion &data)!= 0)
{
return 0;
}
//进入的时候携带用户名昵称 默认为null
//得到客户端连接的socket
fd=create_connection();
//输入name
char *name=““;
printf(“亲爱的用户名请输入你的聊天室的姓名哦!\n“);
scanf(“%s“&name);
printf(“\n“);
//正式进入聊天室 进入了之后的话就进行对服务器的连接完成了
printf(“--------》亲爱的客户:%s 你已经成功进入聊天室《--------\n“&name);
//接下来的操作就是 客户端与服务器之间传输数据与接受数据
//这里要使用一个非堵塞的io
//send信息和recv信息都是与服务器之间进行通信的,他们都是同步的函数
//都是堵塞的函数,如果用if来判断,就直接获得返回值也是可以,但是没有实现出来
//然后就使用一个线程一直来接收信息,主线程也是main的线程就一直来发送信息
//这个recvinfo是接受服务器的信息
_beginthread(recvinfo0NULL);
//这下是发送信息
while(1)
{ //发送之前清空内容
memset(sendbuf0sizeof(sendbuf));
//先把姓名输入到这个集合中。
char sendname[1222];
memset(sendname0sizeof(sendname));
char *you=“ say:“;
strcat (sendname&name);
strcat (sendnameyou);
//stdin是标准终端输入 fgets函数是显示在终端上并且内容存入sendbuf中
//fflush(stdin);a
//s(sendbufsizeof(sendbuf)stdin);
scanf(“%s“&sendbuf);
strcat(sendnamesendbuf);
//memset(sendname0sizeof(sendname));
send(fdsendnamesizeof(sendname)0);
memset(sendbuf0sizeof(sendbuf));
}
closesocket(fd);
WSACleanup();
return 0;
}
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2018-12-01 17:19 c的socket服务器\
文件 3142 2018-12-01 17:19 c的socket服务器\c.c
文件 136256 2018-12-01 17:19 c的socket服务器\c.exe
文件 3795 2018-12-01 11:58 c的socket服务器\s.c
文件 136238 2018-12-01 12:29 c的socket服务器\s.exe
相关资源
- OpenKE在windows环境下运行的C++动态链接
- 基于Qt5.9Creator的一个简单socket通信C
- UR机械臂与PC通讯程序socket2018_03_16
- Linux c语言多线程实现生产者/消费者问
- MFC创建用户界面线程方法2
- C++编写windows服务程序
- C++实现HTTP(两种方式:WinInet和Socke
- c++/MFC CSocket仿QQ聊天软件,实现1对1聊
- 创建Windows系统服务demo2(c++版)
- 获取WINDOWS是否登录及登录用户名支持
- linux环境下的QQ聊天系统
- linux局域网聊天软件server+client 源码
- 纸牌 windows 纸牌
- windows下 c++实现ping地址源码两种
- MFC实现类似Windows绘图的文字输入功能
- TCP一对多通信_基于MFC多线程
- windows下C++实现的HTTP web 服务器
- 生产者消费者算法图形化演示系统
- tcp socket实现单进程单线程 高并发服务
- window平台下c++ 对zip压缩解压缩工程源
- (转)VC老版主薄荷用VC++6.0写的TCP
- 多进程写文件仿真
- 基于linux系统socket网络五子棋对战
- 五子棋AI代码 启发式搜索+算杀 内置禁
- MFC socket编程MyQQ
- MFC单文档画图(直线矩形有注释)
- Windows内存清理工具实现含源码及程序
- 远程文件--select模式
- Windows MFC排序演示过程
- c++/MFC CSocket仿QQ聊天软件,实现1对1聊
评论
共有 条评论