网络编程之socket编程实例
简单实例1
server.c
#include <stdio.h> #include <string.h> #include <stdlib.h> #include <unistd.h> #include <netinet/in.h> #include <arpa/inet.h> #include <sys/socket.h> #include <pthread.h> int sockfd;//服务器socket ];//客户端的socketfd,100个元素,fds[0]~fds[99] ;//用来控制进入聊天室的人数为100以内 char* IP = "0.0.0.0"; ; typedef struct sockaddr SA; void init(){ sockfd = socket(PF_INET,SOCK_STREAM,); ){ perror("创建socket失败"); exit(-); } struct sockaddr_in addr; addr.sin_family = PF_INET; addr.sin_port = htons(PORT); addr.sin_addr.s_addr = inet_addr(IP); ){ perror("绑定失败"); exit(-); } ) == -){ perror("设置监听失败"); exit(-); } } void SendMsgToAll(char* msg){ int i; ;i < size;i++){ ){ printf("sendto%d\n",fds[i]); send(fds[i],msg,strlen(msg),); } } } void* service_thread(void* p){ int fd = *(int*)p; printf("pthread = %d\n",fd); ){ ] = {}; ) <= ){ int i; ;i < size;i++){ if (fd == fds[i]){ fds[i] = ; break; } } printf("退出:fd = %dquit\n",fd); pthread_exit((void*)i); } //把服务器接受到的信息发给所有的客户端 SendMsgToAll(buf); } } void service(){ printf("服务器启动\n"); ){ struct sockaddr_in fromaddr; socklen_t len = sizeof(fromaddr); int fd = accept(sockfd,(SA*)&fromaddr,&len); ){ printf("客户端连接出错...\n"); continue; } ; ;i < size;i++){ ){ //记录客户端的socket fds[i] = fd; printf("fd = %d\n",fd); //有客户端连接之后,启动线程给此客户服务 pthread_t tid; pthread_create(&tid,,service_thread,&fd); break; } if (size == i){ //发送给客户端说聊天室满了 char* str = "对不起,聊天室已经满了!"; send(fd,str,strlen(str),); close(fd); } } } } int main(){ init(); service(); }
client.c
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <pthread.h> int sockfd;//客户端socket char* IP = "192.168.1.105";//服务器的IP ;//服务器服务端口 typedef struct sockaddr SA; ]; void init(){ sockfd = socket(PF_INET,SOCK_STREAM,); struct sockaddr_in addr; addr.sin_family = PF_INET; addr.sin_port = htons(PORT); addr.sin_addr.s_addr = inet_addr(IP); ){ perror("无法连接到服务器"); exit(-); } printf("客户端启动成功\n"); } void start(){ pthread_t id; void* recv_thread(void*); pthread_create(&id,,recv_thread,); ] = {}; sprintf(buf2,"%s进入了聊天室",name); send(sockfd,buf2,strlen(buf2),); ){ ] = {}; scanf("%s",buf); ] = {}; sprintf(msg,"%s:%s",name,buf); send(sockfd,msg,strlen(msg),); ){ memset(buf2,,sizeof(buf2)); sprintf(buf2,"%s退出了聊天室",name); send(sockfd,buf2,strlen(buf2),); break; } } close(sockfd); } void* recv_thread(void* p){ ){ ] = {}; ) <= ){ return; } printf("%s\n",buf); } } int main(){ init(); printf("请输入您的名字:"); scanf("%s",name); start(); ; }
网络编程之socket编程实例的更多相关文章
- 网络编程之Socket代码实例
网络编程之Socket代码实例 一.基本Socket例子 Server端: # Echo server program import socket HOST = '' # Symbolic name ...
- java网络编程之Socket编程
概念 网络编程分为BIO(传统IO).NIO.AIO.Socket编程属于BIO这种传统IO. InetAddress java.net.InetAddress是JAVA中管理IP地址的类,常用 pu ...
- linux网络编程之socket编程(一)
今天开始,继续来学习linux编程,这次主要是研究下linux下的网络编程,而网络编程中最基本的需从socket编程开始,下面正式开始学习: 什么是socket: 在学习套接口之前,先要回顾一下Tcp ...
- linux网络编程之socket编程(八)
学习socket编程继续,今天要学习的内容如下: 先来简单介绍一下这五种模型分别是哪些,偏理论,有个大致的印象就成,做个对比,因为最终只会研究一个I/O模型,也是经常会用到的, 阻塞I/O: 先用一个 ...
- linux网络编程之socket编程(三)
今天继续对socket编程进行学习,在学习之前,需要回顾一下上一篇中编写的回射客户/服务器程序(http://www.cnblogs.com/webor2006/p/3923254.html),因为今 ...
- linux网络编程之socket编程(二)
今天继续对socket编程进行研究,这里会真正开如用socket写一个小例子,进入正题: TCP客户/服务器模型: 关于这个模型的流程这里就不多说了,比较容易理解,下面则利用这种模型来编写一个实际 ...
- linux网络编程之socket编程(十二)
今天继续学习socket编程,期待的APEC会议终于在京召开了,听说昨晚鸟巢那灯火通明,遍地礼花,有点08年奥运会的架势,有种冲动想去瞅见一下习大大的真容,"伟大的祖国,我爱你~~~&quo ...
- linux网络编程之socket编程(十一)
今天继续学习socket编程,这次主要是学习超时方法的封装,内容如下: ①.alarm[不常用,了解既可] 它的实现思路是这样的: 但是这种方案有一定的问题,因为闹钟可能会作为其它的用途,这时所设置的 ...
- linux网络编程之socket编程(十)
今天继续socket编程的学习,最近晚上睡觉都没有发热,没有暖气的日子还是种煎熬,快乐的十一也已经走来,幸福有暖气的日子也快啦,好了,回到正题~ ①close终止了数据传送的两个方向. ②shutdo ...
随机推荐
- python基础12 ---函数模块2
函数模块 一.sys函数模块详解 1.sys.argv[x] 功能:从程序外部接受参数,接收的参数个数可以是多个,在程序内部sys.argv吧这些外部参数转换成元组的形式,然后以索引x的方式在内部取出 ...
- LeetCode:二叉树相关应用
LeetCode:二叉树相关应用 基础知识 617.归并两个二叉树 题目 Given two binary trees and imagine that when you put one of the ...
- html5 css3 进度条特效
https://www.html5tricks.com/tag/css3%E8%BF%9B%E5%BA%A6%E6%9D%A1/page/3
- sublime text的pylinter插件设置pylint_rc后提示错误
sublime text插件pylinter提示错误 Warning: option include-ids is deprecated and ignored. 错误本身是Python的错误,这说明 ...
- 中国剩余定理的应用:猪的安家 ->福州大学 OJ
Problem 1402 猪的安家 Accept: 984 Su ...
- WCF REST开启Cors 解决 No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost' is therefore not allowed access. The response had HTTP status code 405.
现象: 编写了REST接口: [ServiceContract] public interface IService1 { [OperationContract] [WebInvoke(UriTemp ...
- Codeforces 459E Pashmak and Graph:dp + 贪心
题目链接:http://codeforces.com/problemset/problem/459/E 题意: 给你一个有向图,每条边有边权. 让你找出一条路径,使得这条路径上的边权严格递增. 问你这 ...
- HTTP-接触
[HTTP]http是基于TCP/IP协议的应用层协议,他不涉及数据包(packet)传输,主要规定了客户端和服务器之间的通信格式,默认端口是80端口. 不同版本http协议里的相关概念[Conten ...
- MyBaties--Mapper configuration
method one: <!-- Using classpath relative resources --> <mappers> <mapper resource=&q ...
- stl_slist.h
stl_slist.h // Filename: stl_slist.h // Comment By: 凝霜 // E-mail: mdl2009@vip.qq.com // Blog: http:/ ...