简单unix 局域网的TCP会话
client.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include <sys/types.h>
#include <unistd.h>
#include <time.h> #define maxn 101
/**
服务器端
1>建立一个基于TCP的流套接字描述符
2>将套接字描述符绑定到本地地址和本地端口上
3>监听客户端的请求
4>通过Accept接收客户端的请求
5>发送数据/接收数据
6>关闭套接字
客户端
1>与服务器端建立链接
2> 发送数据/接收数据
3>关闭套接字
**/
int main(int argc, char** argv)
{
int s_socket ;
//1>建立一个基于TCP的流套接字描述符
if((s_socket = socket(AF_INET, SOCK_STREAM, )) == -)
{
herror("socket");
exit(errno);
}
else
{
printf("socket create success!\n");
}
//端口号
unsigned int port;
if(argv[]) {
port = atoi(argv[]);
}
else {
port = ;
}
//2>将套接字描述符绑定到本地地址和本地端口上
struct sockaddr_in addport;
bzero(&addport, sizeof(addport));
addport.sin_family = AF_INET;
//addport.sin_addr.s_addr = inet_addr(argv[1]);
addport.sin_port = htons(port);
if(inet_aton(argv[], (struct in_addr*)&addport.sin_addr.s_addr) == -)
{
herror("port");
exit(errno);
}
else
{
printf("IP and port create success!\n");
}
//建立链接
if(connect(s_socket, (struct sockaddr*)&addport, sizeof(addport)) == -)
{
herror("connect");
exit(errno);
}
else
{
printf("connect success\n");
}
//3>监听客户端的请求
char buf[maxn];
char buf1[maxn];
int flag = ;
while()
{
//接收信息
flag = ;
bzero(buf, maxn);
int len;
len = recv(s_socket, buf, maxn, );
if(len > )
{
printf("服务器发来的信息是: %s\n", buf);
}
else
{
if(len == )
{
printf("server is closed!\n");
flag = ;
break;
}
else if(len == -)
{
printf("receive message failure!");
}
}
loop:
if(flag == ) break;
bzero(buf, maxn);
printf("请输入要发送的信息:");
fgets(buf, maxn, stdin);
if(strncasecmp(buf, "exit", ) == )
{
printf("聊天中止\n");
break;
}
if(strncmp(buf, "\n", ) == )
{
printf("空字符\n");
continue;
}
int L_len = strlen(buf);
if(buf[L_len - ] == '\n')
{
len = send(s_socket, buf, L_len - , );
}
else
{
len = send(s_socket, buf, L_len, );
}
if(len > )
{
printf("send message success!\n");
}
else
{
printf("send message failure!\n");
break;
}
}
close(s_socket);
return ;
}
server.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include <sys/types.h>
#include <unistd.h>
#include <time.h> #define maxn 101
/**
服务器端
1>建立一个基于TCP的流套接字描述符
2>将套接字描述符绑定到本地地址和本地端口上
3>监听客户端的请求
4>通过Accept接收客户端的请求
5>发送数据/接收数据
6>关闭套接字
客户端
1>与服务器端建立链接
2> 发送数据/接收数据
3>关闭套接字
**/
int main(int argc, char** argv)
{
int s_socket, sock_port ;
//1>建立一个基于TCP的流套接字描述符
if((s_socket = socket(AF_INET, SOCK_STREAM, )) == -)
{
herror("socket");
exit(errno);
}
else
{
printf("socket create success!\n");
}
//端口号
unsigned int port;
if(argv[]) {
port = atoi(argv[]);
}
else {
port = ;
}
if(argv[])
{
sock_port = atoi(argv[]);
}
else
{
sock_port = ;
}
//2>将套接字描述符绑定到本地地址和本地端口上
struct sockaddr_in c_addport, s_addport;
bzero(&s_addport, sizeof(s_addport));
s_addport.sin_family = AF_INET;
//s_addport.sin_addr.s_addr = inet_addr(argv[1]);
s_addport.sin_port = htons(port);
if(argv[])
{
s_addport.sin_addr.s_addr = inet_addr(argv[]);
}
else
{
s_addport.sin_addr.s_addr = INADDR_ANY;
}
if((bind(s_socket, (struct sockaddr*) &s_addport, sizeof(struct sockaddr))) == -) {
perror("bind");
exit(errno);
}
else {
printf("bind success!\n");
}
//3>监听客户端的请求
if(listen(s_socket, sock_port) == -)
{
herror("listen");
exit(errno);
}
else
{
printf("server is listening!\n");
}
while()
{
int flag;
socklen_t len;
len = sizeof(struct sockaddr);
flag = accept(s_socket, (struct sockaddr*)&c_addport, &len);
if(flag == -)
{
herror("accept");
exit(errno);
}
else
{
printf("Accept success!\n");
printf("现在监听的客户端IP是 :%s端口是%d\n", inet_ntoa(c_addport.sin_addr), ntohl(c_addport.sin_port));
}
char buf[maxn];
while()
{
//发送消息
loop:
bzero(buf, maxn);
printf("请输入要发送的信息:");
fgets(buf, maxn, stdin);
int L_len = strlen(buf);
int Index ;
if(strncasecmp(buf, "exit", ) == )
{
printf("chatting be ended !\n");
break;
}
if(strcmp(buf, "\n") == )
{
printf("空字符\n");
goto loop;
}
if(buf[L_len - ] == '\n')
{
Index = send(flag, buf, L_len - , );
}
else
{
Index = send(flag, buf, L_len, );
}
if(Index == -)
{
printf("send message failure!");
}
else
{
printf("send message success\n");
}
//接收消息
bzero(buf, maxn);
int LL;
LL = recv(flag, buf, maxn, );
if(LL > )
{
printf("从客户端接收的信息是%s\n", buf);
}
else
{
if(LL < )
{
printf("Receive message failure!\n");
}
else
{
printf("客户端退出,聊天中止\n");
break;
}
}
}
close(flag);
printf("是否结束进程?Y->是:N->否");
bzero(buf, maxn);
fgets(buf, maxn, stdin);
if(strncasecmp(buf, "Y", ) == )
{
printf("结束进程\n");
break;
}
else {
printf("waiting ..........\n");
}
}
close(s_socket);
return ;
}


应用少.....更新中。。。。。。
简单unix 局域网的TCP会话的更多相关文章
- TCP会话劫持_转
前言通常,大家所说的入侵,都是针对一台主机,在获得管理员权限后,就很是得意:其实,真正的入侵是占领整个内部网络.针对内部网络的攻击方法比较多,但比较有效的方法非ARP欺骗.DNS欺骗莫属了.但是,不管 ...
- C# Socket编程实现简单的局域网聊天器
目录 前言 编码 服务端监听接口 客户端连接接口 文字发送接口 文件发送接口 信息接收接口(文字与文件) 使用 注意事项 源码 前言 最近在学习C# Socket相关的知识,学习之余,动手做了一个简单 ...
- Nginx 中 fastcgi_pass 监听端口 unix socket和tcp socket差
Nginx 中 fastcgi_pass 监听端口 unix socket和tcp socket差别 Nginx连接fastcgi的方式有2种:unix domain socket和TCP,Uni ...
- 使用gitblit搭建一个简单的局域网服务器
使用gitblit搭建一个简单的局域网服务器 1.使用背景 现在很多使用github管理代码,但是github需要互联网的支持,而且私有的git库需要收费.有一些项目的代码不能外泄,所以,搭建一个局域 ...
- nginxhttp请求限制丶tcp会话限制和下载速度限制
(1)nginx请求限制 ngx_http_limit_req_module:开启对单个ip丶单个会话在单位时间内请求的限制rate表示限制的速率 1.修改nginx配置文件 #vim /usr/lo ...
- 【转】nginx 和 php-fpm 通信使用unix socket还是TCP,及其配置
原文: http://blog.csdn.net/pcyph/article/details/46513521 -------------------------------------------- ...
- 最简单的理解 建立TCP连接 三次握手协议
最简单的理解一:建立TCP连接:三次握手协议 客户端:我要对你讲话,你能听到吗:服务端:我能听到:而且我也要对你讲话,你能听到吗:客户端:我也能听到.…….互相开始通话…….. 二:关闭TCP ...
- UNIX网络编程---TCP客户/服务器程序示例(五)
一.概述 客户从标准输入读入一行文本,并写给服务器 服务器从网络输入读入这行文本,并回射给客户 客户从网络输入读入这行回射文本,并显示在标准输出上 二.TCP回射服务器程序:main函数 这里给了函数 ...
- Java简单实现UDP和TCP
TCP实现 TCP协议需要在双方之间建立连接,通过输入输出流来进行数据的交换,建立需要通过三次握手,断开需要四次挥手,保证了数据的完整性,但传输效率也会相应的降低. 简单的TCP实现 //服务端 pu ...
随机推荐
- DFS实现模板
以如下图的无向图G4为例,进行图的深度优先搜索: 假设从顶点v1出发进行搜索,在访问了顶点v1之后,选择邻接点v2.因为v2未曾访问,则从v2出发进行搜索.依次类推,接着从v4 .v8 .v5出发进行 ...
- [译]Python - socket.error: Cannot assign requested address
原文来源: https://stackoverflow.com/questions/48306528/python-socket-error-cannot-assign-requested-addre ...
- 剑指offer:正则表达式匹配
目录 题目 解题思路 具体代码 题目 题目链接 剑指offer:正则表达式匹配 题目描述 请实现一个函数用来匹配包括'.'和'*'的正则表达式.模式中的字符.表示任意一个字符,而*表示它前面的字符可以 ...
- 入口文件-npm run dev
如果你是用vue.js官网提供的脚手架工具并沿用默认配置的话,你执行npm run dev的时候会出来页面,是因为你根目录下的package.json文件里script配置了"dev&quo ...
- JavaScript中常用转义字符
\b 退格 \f 换页 \r 回车 \n 换行 \" 双引号 \' 单引号 \t Tab字符 \\ 反斜杠 \xnn 十六进制代码nn表示的字符 \unnnn 十 ...
- 【bzoj4002】[JLOI2015]有意义的字符串 数论+矩阵乘法
题目描述 B 君有两个好朋友,他们叫宁宁和冉冉.有一天,冉冉遇到了一个有趣的题目:输入 b;d;n,求 输入 一行三个整数 b;d;n 输出 一行一个数表示模 7528443412579576937 ...
- 2017 Multi-University Training Contest - Team 3 RXD and functions(NTT)
题解: 我是参考的 http://blog.csdn.net/qq_32570675/article/details/76571666 这一篇 orz 原来可以这么变换,涨姿势 代码: #includ ...
- Word2010 自动生成二级编号
http://jingyan.baidu.com/article/3ea5148901919752e61bbafe.html
- [Leetcode] distinct subsequences 不同子序列
Given a string S and a string T, count the number of distinct subsequences of T in S. A subsequence ...
- Codeforces Round #510 (Div. 2) D. Petya and Array(树状数组)
D. Petya and Array 题目链接:https://codeforces.com/contest/1042/problem/D 题意: 给出n个数,问一共有多少个区间,满足区间和小于t. ...