下面是socket编程的服务器端

先看一个图,1

 #include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<unistd.h> //针对系统调用的封装 fork,pipe 各种i/o原语 read write 等 #include<sys/socket.h>
#include<netinet/in.h> //互联网地址族 定义数据结构sockaddr_in
#include<arpa/inet.h> //提供IP地址转换函数 #include<ctype.h> //一批C语言字符分类函数 用 于 测试字符是否属于特定的字符类别 topper()在这里 #define MAXLINE 80
#define SER_PORT 8000 int main(void){ struct sockaddr_in servaddr,cliaddr;
socklen_t cliaddr_len; int listenfd,connfd;
char buf[MAXLINE];
char str[INET_ADDRSTRLEN];
int i,n;
char tt[] = "exit1"; //这里有字符数组和字符指针的区别的坑 具体百度查询
char *bb; listenfd = socket(AF_INET,SOCK_STREAM,); //
// domain 协议域 AF_INET AF_INET6,AF_LOCAL(AF_UNIX) AF_ROUTE
// type socket类型 SOCK_STREAM(流式socket 针对tcp ) SOCK_DGRAM(数据包 针对udp) SOCK_RAW
// protocol 协议 tcp协议,udp协议 stcp协议 tipc协议 bzero(&servaddr,sizeof(servaddr)); //初始化赋值为0 servaddr.sin_family = AF_INET;
servaddr.sin_addr.s_addr = htonl(INADDR_ANY); //任何ip //这里是大小端的 转换问题。。可以 百度
servaddr.sin_port = htons(SER_PORT); //端口 bind(listenfd,(struct sockaddr *)&servaddr,sizeof(servaddr)); //绑定链接的套接字描述符 和 地址和端口 listen(listenfd,); printf("Accepting connections ... \n ");
while(){ cliaddr_len = sizeof(cliaddr);
connfd = accept(listenfd,(struct sockaddr *)&cliaddr,&cliaddr_len); //连接的套接字描述符 返回链接的地址 返回地址的缓冲区长度 //返回 客户端的套接字描述符
printf("connfd:%d------\n",connfd); printf("received from %s at PORT %d \n",
inet_ntop(AF_INET,&cliaddr.sin_addr,str,sizeof(str)),
ntohs(cliaddr.sin_port));
while(){
n = read(connfd,buf,MAXLINE); // read(int fd,void *buf, size_t count); 成功返回 读取的字节数 数据保存在buf上 读取客户端的数据 printf("%d,")
//printf("buf:%s-----%d\n",buf,strcmp(buf,"exit1"));
//printf("tt:%s-----%d\n",tt,strcmp(tt,"exit1"));
for(int i=;i<;i++){
tt[i] = buf[i];
}
printf("tt:%s-----%d\n",tt,strcmp(tt,"exit1"));
if(strcmp(tt,"exit1") == ){ //strcmp 对比的就是字符
close(connfd);
printf("close:-----\n");
break;
} for(i=; i < n; i++){
buf[i] = toupper(buf[i]);
}
write(connfd,buf,n); // // 向客户端写入数据
} } return ; } //这个程序有漏洞,如果客户端断线或者关闭,服务器就会死循环。 客户端的标准输入是阻塞的。。。其他都不是阻塞的。

客户端

 #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<errno.h> //错误 #define MAXLINE 80
#define SER_PORT 8000 int main(int argc,char *argv[]){ struct sockaddr_in servaddr;
char buf[MAXLINE]; int sockfd,n;
char *str;
char tt[]; //if(argc != 2){
// fputs("usage: ./client message \n ",stderr);
// exit(1);
//} //str = argv[1]; sockfd = socket(AF_INET,SOCK_STREAM,); bzero(&servaddr,sizeof(servaddr));
servaddr.sin_family = AF_INET;
inet_pton(AF_INET,"127.0.0.1",&servaddr.sin_addr);
servaddr.sin_port = htons(SER_PORT); if(connect(sockfd,(struct sockaddr *)&servaddr,sizeof(servaddr))<){
printf("connet error:%s\n",strerror(errno));
} //链接服务器 while(){ memset(buf,,MAXLINE);
printf("client connet server ...\n");
n = read(STDIN_FILENO,buf,MAXLINE); //从标准输入 读取数据
for(int i=;i<;i++){
tt[i] = buf[i];
}
if(strcmp(tt,"exit1") == ){
printf("exit server connect \n");
close(sockfd);
return ;
} write(sockfd,buf,n); //把我们的输入,写到服务器 if(strcmp(tt,"exit1") == ){
printf("exit server connect \n");
close(sockfd);
return ;
} n = read(sockfd,buf,MAXLINE); //从服务器读取数据 printf("Response from server:\n");
write(STDOUT_FILENO,buf,n); //写到标注输出上
printf("\n");
} close(sockfd);
return ; }

实验结果:

总结:一个socket建立一个连接,必须配合一个connect,对应的服务器端对应一个accept 。不能多次connet,多次是之后会报错,也不能同一个客户端socket多次accept,因为服务器已经有了,accept会阻塞等待其他客户端的socket。

linux网络编程1 最简单的socket编程的更多相关文章

  1. 网络编程学习笔记一:Socket编程

    “一切皆Socket!” 话虽些许夸张,但是事实也是,现在的网络编程几乎都是用的socket. ——有感于实际编程和开源项目研究. 我们深谙信息交流的价值,那网络中进程之间如何通信,如我们每天打开浏览 ...

  2. 转 网络编程学习笔记一:Socket编程

    题外话 前几天和朋友聊天,朋友问我怎么最近不写博客了,一个是因为最近在忙着公司使用的一些控件的开发,浏览器兼容性搞死人:但主要是因为这段时间一直在看html5的东西,看到web socket时觉得很有 ...

  3. 网络编程——基于TCP协议的Socket编程,基于UDP协议的Socket编程

    Socket编程 目前较为流行的网络编程模型是客户机/服务器通信模式 客户进程向服务器进程发出要求某种服务的请求,服务器进程响应该请求.如图所示,通常,一个服务器进程会同时为多个客户端进程服务,图中服 ...

  4. C#版 Socket编程(最简单的Socket通信功能)

    示例程序是同步套接字程序,功能很简单,只是客户端发给服务器一条信息,服务器向客户端返回一条信息:这里只是一个简单的示例,是一个最基本的socket编程流程,在接下来的文章中,会依次记录套接字的同步和异 ...

  5. 【转/TCP协议编程】 基于TCP的Socket 编程

    基于TCP(面向连接)的socket编程,分为客户端和服务器端. 客户端的流程如下: (1)创建套接字(socket) (2)向服务器发出连接请求(connect) (3)和服务器端进行通信(send ...

  6. Linux C编程一站式学习读书笔记——socket编程

    前言 研一的时候写过socket网络编程,研二这一年已经在用php写api都快把之前的基础知识忘干净了,这里回顾一下,主要也是项目里用到了,最近博客好杂乱啊,不过确实是到了关键时刻,各种复习加巩固准备 ...

  7. Linux下面向TCP连接的C++ Socket编程实例

    Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口.即Socket提供了操作上述特殊文件的接口,使用这些接口可以实现网络编程. Socket通信流程图 TCP(Transmis ...

  8. 简单的socket编程

    1.socket 服务器搭建 实例化socket服务器,循环获取请求 package com.orange.util; import java.io.IOException; import java. ...

  9. python 简单的Socket编程

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

随机推荐

  1. 几个获取Windows系统信息的Delphi程序

    1.获取windows版本信息 可以通过Windows API函数GetVersionEx来获得. 具体程序如下: Procedure Tform1.Button1Click(sender:TObje ...

  2. redhat6 + 11G DG部署

    在主库中netca配置 [oracle@HE3dbs]$ cat /u01/app/oracle/product/11gr2/db_1/network/admin/listener.ora #list ...

  3. NamingException with message: Name [spring.liveBeansView.mbeanDomain]

    spring mvc启动出现 NamingException with message: Name [spring.liveBeansView.mbeanDomain],解决方式: 在web.xml中 ...

  4. Varnish+Xcache构建高性能WEB构架初探

    本文主要讲述web优化方案和缓存工具的调研及使用.根据目前的测试结果来看,采用varnish+xcache作为 apache和 php缓存这种架构具有高并发.高稳定性,易扩展等优点,服务器的动态请求处 ...

  5. mvc文件上传支持批量上传,拖拽以及预览,文件内容校验等

    使用bootstrap-fileinput 使用方式: 1.nuget:Install-Package bootstrap-fileinput 2.语言本地化{下载fileinput_locale_z ...

  6. HDU 3783 ZOJ

    ZOJ Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...

  7. datagridview数据绑定操作数据库实现增删改查

    DataSet数据集,数据缓存在客户端内存中,支持断开式连接.DataGridView控件绑定DataSet时,它自动的改变的DS的行的状态,而且在做增删改查的时候,可以借助SqlCommandBui ...

  8. 最新升级的火狐38.0.6识别ajax调用返回的""空值可能有异常。

    自已在调用一段ajax开发中,返回的是空值 string result = string.Empty;return result; 但在页面进行$.ajax调用 时 输出alert(result);应 ...

  9. 程序员的一生时间90%是用在编程上,而剩余的10%是活在世界上。刚进CSDN的博客看到这么句话

    程序员的一生时间90%是用在编程上,而剩余的10%是活在世界上. 而自己呢?是个程序员呢还是个业余玩家!

  10. C-Swipe Mobile 一个适用于Vue2.x的移动端轮播组件

    近期在做的一个Vue2项目里需要一个可以滑动的轮播组件,但是又因为现有的传统轮播库功能过于繁琐和笨重.因此自己写了一个针对于Vue2.x的轻型轮播组件. 项目GitHub链接:C-Swipe Mobi ...