C/S模式简单socket通信
TCP连接方式
sever.c
#include <stdio.h>
#include <stdlib.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <string.h>
#include <errno.h> #define PORT 8000
#define QUEN 20
#define MAXLINE 2048
int main()
{
int sock_fd,connect_fd;
char BUFFER[2048];
int n;
struct sockaddr_in severaddr;
if((sock_fd = socket(AF_INET, SOCK_STREAM, 0))==-1)
{
printf("create socket error: %s(errno: %d)\n",strerror(errno),errno);
exit(0);
}
memset(&severaddr,0,sizeof(severaddr));
severaddr.sin_family = AF_INET;
severaddr.sin_port = htons(PORT);
severaddr.sin_addr.s_addr = htonl(INADDR_ANY); if((bind(sock_fd,(struct sockaddr*)&severaddr, sizeof(severaddr)))==-1)
{
printf("bind socket error: %s(errno: %d)\n",strerror(errno),errno);
exit(0);
}
if(listen(sock_fd,QUEN)==-1)
{
printf("listen error");
}
printf("=============wating for client=========================\n"); connect_fd = accept(sock_fd,(struct sockaddr*)NULL, NULL);
while((n = recv(connect_fd,BUFFER,MAXLINE,0))>0)
{
if(!fork()) //son
{
if((send(connect_fd,BUFFER,sizeof(BUFFER),0)) == -1)
perror("send error");
BUFFER[n]='\0';
printf("receive message from client: %s\n",BUFFER);
close(connect_fd);
exit(0);
}
if((strcmp(BUFFER,"exit"))==0)
{
printf("exit link");
break;
}
} close(connect_fd);
close(sock_fd); }
client.c
#include <stdio.h>
#include <stdlib.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <string.h> #define MAXLINE 2048
#define PORT 8000
int main()
{
int sock_fd,rec_len;
char recvline[2048],sendline[2048];
char buf[MAXLINE];
struct sockaddr_in clientaddr; if((sock_fd = socket(AF_INET, SOCK_STREAM,0))==-1)
{
printf("socket link error\n");
}
memset(&clientaddr,0,sizeof(clientaddr));
clientaddr.sin_family = AF_INET;
clientaddr.sin_port =htons( PORT);
clientaddr.sin_addr.s_addr = inet_addr("127.0.0.1"); if((connect(sock_fd,(struct sockaddr*)&clientaddr,sizeof(clientaddr)))==-1)
{
printf("connect errot\n");
exit(0);
}
while(fgets(sendline,2048,stdin) != NULL)
{ printf("send message to sever:%s\n",sendline); send(sock_fd,sendline, sizeof(sendline),0); rec_len = recv(sock_fd,buf,MAXLINE,0);
if(sendline=="exit")
{
printf("exit link\n");
break;
}
buf[rec_len] = '\0';
printf("receive:%s\n",buf); } close(sock_fd); exit(0);
}
UDP方式连接
sever.c
#include <stdio.h>
#include <sys/socket.h>
#include <string.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <stdlib.h>
#define FILE_NAME_SIZE 512
#define PORT 8000
#define BUFFERSIZE 1024
int main()
{
int sock_id, bind_id;
struct sockaddr_in severaddr;
if((sock_id = socket(AF_INET,SOCK_DGRAM,)) == -)
{
printf("socket error");
exit();
}
memset(&severaddr,, sizeof(severaddr));
severaddr.sin_family = AF_INET;
severaddr.sin_port = htons(PORT);
severaddr.sin_addr.s_addr = htonl(INADDR_ANY);
if((bind_id = bind(sock_id, (struct sockaddr*)&severaddr, sizeof(severaddr))) == -)
{ printf("bind error"); exit(); }
while()
{
struct sockaddr_in clientaddr;
socklen_t clientaddr_length = sizeof(clientaddr);
char recvbuf[BUFFERSIZE];
bzero(recvbuf, BUFFERSIZE);
if((recvfrom(sock_id,recvbuf,BUFFERSIZE,,(struct sockaddr*)&clientaddr,&clientaddr_length))==-)
{ printf("recv error"); exit(); }
char file_name[FILE_NAME_SIZE];
bzero(file_name, FILE_NAME_SIZE);
strncpy(file_name,recvbuf,strlen(recvbuf)>FILE_NAME_SIZE?FILE_NAME_SIZE:strlen(recvbuf));
printf("%s\n",file_name);
}
close(sock_id);
return ;
}
client.c
#include <stdio.h>
#include <stdlib.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <string.h>
#include <errno.h>
#define PORT 8000
#define BUFFER_SIZE 1024
int main()
{
int sock_id;
struct sockaddr_in clientaddr;
if((sock_id = socket(AF_INET, SOCK_DGRAM, )) == -)
{ perror("sock error"); exit(); }
memset(&clientaddr, , sizeof(clientaddr));
clientaddr.sin_family = AF_INET;
clientaddr.sin_port = htons(PORT);
clientaddr.sin_addr.s_addr = inet_addr("127.0.0.1");
char file_name[BUFFER_SIZE];
bzero(file_name, BUFFER_SIZE);
scanf("%s\n",file_name);
if(sendto(sock_id, file_name, BUFFER_SIZE, , (struct sockaddr *)&clientaddr, sizeof(clientaddr)) <)
{ perror("send error"); exit(); }
close(sock_id);
return ;
}
C/S模式简单socket通信的更多相关文章
- 基于Tcp协议的简单Socket通信实例(JAVA)
好久没写博客了,前段时间忙于做项目,耽误了些时间,今天开始继续写起~ 今天来讲下关于Socket通信的简单应用,关于什么是Socket以及一些网络编程的基础,这里就不提了,只记录最简单易懂实用的东西. ...
- 基于NIO的Socket通信
一.NIO模式的基本原理: 服务端: 首先,服务端打开一个通道(ServerSocketChannel),并向通道中注册一个通道调度器(Selector):然后向通道调度器注册感兴趣的事件Select ...
- Java Socket 通信实例 - 转载
基于Tcp协议的简单Socket通信实例(JAVA) 好久没写博客了,前段时间忙于做项目,耽误了些时间,今天开始继续写起~ 今天来讲下关于Socket通信的简单应用,关于什么是Socket以及一些 ...
- php简单实现socket通信
socket通信的原理在这里就不说了,它的用途还是比较广泛的,我们可以使用socket来做一个API接口出来,也可以使用socket来实现两个程序之间的通信,我们来研究一下在php里面如何实现sock ...
- UEditor编辑器和php简单的实现socket通信
一.UEditor编辑器 使用这个编辑器是需要先下载编辑器文件,记得下载的时候放入自己的网站中,既然是php中使用,自然我下载的就是php的UEditor编辑器了,然后是utf-8的 其实使用很简单, ...
- Day 6-2简单的socket通信
什么是socket? Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口.在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面 ...
- php socket通信的简单实现
socket通信的原理在这里就不说了,它的用途还是比较广泛的,我们可以使用socket来做一个API接口出来,也可以使用socket来实现两个程序之间的通信,我们来研究一下在php里面如何实现sock ...
- AgileEAS.NET SOA 中间件平台.Net Socket通信框架-简单例子-实现简单的服务端客户端消息应答
一.AgileEAS.NET SOA中间件Socket/Tcp框架介绍 在文章AgileEAS.NET SOA 中间件平台Socket/Tcp通信框架介绍一文之中我们对AgileEAS.NET SOA ...
- Linux下简单的socket通信实例
Linux下简单的socket通信实例 If you spend too much time thinking about a thing, you’ll never get it done. —Br ...
随机推荐
- 框架-.NET:ASP.NET MVC
ylbtech-框架-.NET:ASP.NET MVC ASP.NET MVC 是Windows系统下面的Web研发框架,有Microsoft提供.MVC顾名思义:Model, View, Contr ...
- HTML5: HTML5 语义元素
ylbtech-HTML5: HTML5 语义元素 1.返回顶部 1. HTML5 语义元素 语义= 意义 语义元素 = 有意义的元素 什么是语义元素? 一个语义元素能够清楚的描述其意义给浏览器和开发 ...
- 03 java语言基础逻辑运算符
03.01_Java语言基础(逻辑运算符的基本用法) A:逻辑运算符有哪些 &,|,^,! &&,|| B:案例演示 逻辑运算符的基本用法 注意事项: a:逻辑运算符一般用于连 ...
- C#cs编译成dll命令提示符
csc /t:library /out:F:\Provider.dll /r:F:\BPM.dll /r:F:\BPM.Server.dll F:\Provider.cs
- 安装graphviz
环境win10 1. 下载安装包首先进入官网下载msi文件 安装,一路next,不需要注意什么 2.设置环境变量 安装完毕之后,我们需要手动配置环境变量. 找到刚才我们安装地址,进入graphviz, ...
- zabbix监控linux内存
通过free -m查看当前内存 可用内存:Available memory=free+buffers+cached,即31068=759+66+30243 已用内存:Used memory=used- ...
- python面试题之补充缺失的代码
补充缺失的代码 def print_directory_contents(sPath): """ 这个函数接受文件夹的名称作为输入参数, 返回该文件夹中文件的路径, 以及 ...
- [轉]C/C++中的volatile使用時機?
不知各位對volatile(揮發性的)這個字陌不陌生? 我相信大家在一些程式或多或少都看 過這個字眼, 但是究竟要在何種場合用它呢?.當然一定是有需要, C/C++才會有這個保留字, 否則只是增加pr ...
- Go 语言变量、常量
变量 第一种,指定变量类型,声明后若不赋值,使用默认值. var v_name v_type v_name = value 第二种,根据值自行判定变量类型. var v_name = value 第三 ...
- 域名访问和ip访问区别
域名访问和ip访问区别 ip访问对应某一台确定的服务器: 域名访问相当于在ip访问的基础上,做了一个反向代理的中间功能.例如:百度,很多人会同时使用,如果使用的是同一台服务器的话,服务器估计会扛不住, ...