简单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 ...
随机推荐
- 线段树——hdu1754I Hate It
一.题目回顾 题目链接:I Hate It Problem Description 很多学校流行一种比较的习惯.老师们很喜欢询问,从某某到某某当中,分数最高的是多少.这让很多学生很反感.不管你喜不喜欢 ...
- Daily Scrum02 11.29
今天大家都已经开始了进行第二轮迭代的工作!相比第一轮迭代,每个人都已经有了一定开发经验,这次做起来顺手很多.薛神和肖犇的挑战最大,他们需要实现好友功能,手机间的通信.服务器的搭建都是难点,但他们的热情 ...
- 201621044079WEEK06-接口、内部类
作业06-接口.内部类 1. 本周学习总结 1.1 面向对象学习暂告一段落,请使用思维导图,以封装.继承.多态为核心概念画一张思维导图或相关笔记,对面向对象思想进行一个总结. 注1:关键词与内容不求多 ...
- [Elasticsearch] 多字段搜索 (六) - 自定义_all字段,跨域查询及精确值字段
自定义_all字段 在元数据:_all字段中,我们解释了特殊的_all字段会将其它所有字段中的值作为一个大字符串进行索引.尽管将所有字段的值作为一个字段进行索引并不是非常灵活.如果有一个自定义的_al ...
- linux cfs 负载均衡
确定新的负载的时候,代码中给出的公式是: (old×(2^i-1) + new))/2^i 整理下来是: old + (new-old)/2^i i的范围是[1, 4],也就是说,i的层级越高,那么n ...
- HTML5表单提交与PHP环境搭建
PHP服务器使用xampp集成套件 路径 D:\xampp\htdocs\MyServer\index.php 访问 http://localhost/MyServer/index.php 能够正常显 ...
- 建议 里面的sql查找单列 外面的sql查找所有列 这样方便查找数据
- BZOJ5323 [Jxoi2018]游戏 【数论/数学】
题目链接 BZOJ5323 题解 有一些数是不能被别的数筛掉的 这些数出现最晚的位置就是该排列的\(t(p)\) 所以我们只需找出所有这些数,线性筛一下即可,设有\(m\)个 然后枚举最后的位置 \[ ...
- BZOJ_day5
32题...今天颓了不想再写了
- 整理一些JavaScript时间处理扩展函数
在JavaScript中,时间处理是经常需要用到的.最近想要慢慢建立自己的代码库,整理了几个之前用到的js处理时间的函数,发出来跟大家分享一下,以后的使用中会不断增加和修改代码库. 把字符串转换为日期 ...