简单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 ...
随机推荐
- spring笔记(一)
1. 回顾 Struts与Hibernate可以做什么事? Struts, Mvc中控制层解决方案 可以进行请求数据自动封装.类型转换.文件上传.效验… Hibernate, 持久层的解决方案: 可以 ...
- [NOI.AC省选模拟赛3.30] Mas的童年 [二进制乱搞]
题面 传送门 思路 这题其实蛮好想的......就是我考试的时候zz了,一直没有想到标记过的可以不再标记,总复杂度是$O(n)$ 首先我们求个前缀和,那么$ans_i=max(pre[j]+pre[i ...
- CDQZ 2017 游记
Day0: 提前放了一整天假,颓过去了.老吕让我去给B层的讲课,ppt还没做,只能在飞机上赶了QAQ.然后从上午到了衡水就一直在路上或者天上,到了晚上才到学校,然而ppt还是没有做完.还有,鄂尔多斯真 ...
- 在Eclipse上使用egit插件通过ssh协议方式上传项目代码的具体步骤
在Eclipse上使用egit插件通过ssh协议方式上传项目代码 前戏: 使用ssh方式可以不通过https协议,避免直接提供账号密码的方式上传项目到git在线服务器,如Bitbucket.GitHu ...
- Angular Cookie 读写
var app = angular.module('Mywind',['ui.router']) app.controller('Myautumn',function($scope,$http,$fi ...
- Educational Codeforces Round 55 (Rated for Div. 2):D. Maximum Diameter Graph
D. Maximum Diameter Graph 题目链接:https://codeforces.com/contest/1082/problem/D 题意: 给出n个点的最大入度数,要求添加边构成 ...
- HDU 4417 划分树写法
Problem Description Mario is world-famous plumber. His “burly” figure and amazing jumping ability re ...
- spring中@PropertySource注解的使用
概述: The @PropertySource annotation provides a convenient and declarative mechanism for adding aPrope ...
- AngularJs开发——控制器间的通信
AngularJs开发——控制器间的通信 指令与控制器之间通信,无非是以下几种方法: 基于scope继承的方式 基于event传播的方式 service的方式 基于scope继承的方式 最简单的让控制 ...
- MFC 对话框透明效果
网上找的资料自己改了改,在这里记录和分享一下,主要是TransparentWnd函数. 在子类的OnShowWindow函数中调用 ShowWindowAlpha() #pragma once tem ...