【Linux/unix网络编程】之使用socket进行TCP编程
实验一 TCP数据发送与接收
【实验目的】
1、熟练掌握套接字函数的使用方法。
2、应用套接字函数完成基本TCP通讯,实现服务器与客户端的信息交互。
【实验学时】
4学时
【实验内容】
实现一个服务器与一个客户之间通讯。具体功能如下:
(1)服务器端:
服务器端等待客户的连接,一旦连接成功,则显示客户的IP地址、端口号;
循环接收客户发来的信息并在终端上显示,同时在信息前加入序号并返回给客户端;当从客户接收到bye后不再发送给各户并退出程序。
(2)客户端:
根据用户从终端输入的服务器IP地址及端口号连接到相应的服务器;
连接成功后,循环从终端输入信息,并将信息发送给服务器,再从服务器接收信息,并显示在终端上。
当从终端输入bye并发送给服务器后,程序退出。
程序实现:
服务器端:
/* TcpServer.c
copyright@msxh 2015/09/21
*/
#include <stdio.h>
#include <string.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <stdlib.h> int main(){ struct sockaddr_in server;
struct sockaddr_in client;
int listenfd,connetfd;
char ip[];
int port;
int addrlen;
char rebuf[];
char wrbuf[];
char tmp[];
int revlen;
/*---------------------socket-------------------*/
if((listenfd = socket(AF_INET,SOCK_STREAM,))== -){
perror("socket() error\n");
exit();
} /*----------------------IO-----------------------*/
printf("Please input the ip:\n");
scanf("%s",ip);
printf("Please input the port:\n");
scanf("%d",&port); /*---------------------bind----------------------*/
bzero(&server,sizeof(server));
server.sin_family = AF_INET;
server.sin_port = htons(port);
server.sin_addr.s_addr = inet_addr(ip);
if(bind(listenfd,(struct sockaddr *)&server,sizeof(server))== -){
perror("bind() error\n");
exit();
} /*----------------------listen-------------------*/
if (listen(listenfd,)== -){
perror("listen() error\n");
exit();
} /*----------------------accept------------------*/
addrlen = sizeof(client);
if((connetfd = accept(listenfd,(struct sockaddr *)&client,&addrlen))== -){
perror("accept() error\n");
exit();
}
/*---------------------show client---------------*/
printf("connect successful!\n");
printf("the client ip is %s,port is %d\n",inet_ntoa(client.sin_addr),ntohs(port)); /*----------------------read and write----------*/
int serial = ;
while(){
bzero(rebuf,sizeof(rebuf));
revlen = read(connetfd,rebuf,sizeof(rebuf));
if((memcmp("bye",rebuf,))== ){
printf("Bye-bye then close the connect...\n");
break;
}
bzero(wrbuf,sizeof(wrbuf));
bzero(tmp,sizeof(tmp));
sprintf(tmp,"%d",serial);
strcat(tmp,rebuf);
bcopy(tmp,wrbuf,strlen(tmp));
write(connetfd,wrbuf,sizeof(wrbuf));
rebuf[revlen] = '\0';
printf("the info from client is:%s\n",rebuf);
serial++;
} /*----------------------close-------------------*/
close(connetfd);
close(listenfd); return ;
}
客户端实现:
/* TcpClient.c
copyright@msxh 2015/09/21
*/
#include <stdio.h>
#include <string.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <stdlib.h> int main(){
int sockfd;
char wrbuf[];
char ip[];
int port;
int revlen;
char rebuf[];
struct sockaddr_in server; /*---------------------socket---------------------*/
if((sockfd = socket(AF_INET,SOCK_STREAM,))== -){
perror("socket error\n");
exit();
} /*---------------------connect--------------------*/
printf("Please input the ip:\n");
scanf("%s",ip);
printf("Please input the port:\n");
scanf("%d",&port);
bzero(&server,sizeof(server));
server.sin_family = AF_INET;
server.sin_port = htons(port);
inet_aton(ip,&server.sin_addr);
if(connect(sockfd,(struct sockaddr *)&server,sizeof(server))== -){
perror("connect() error\n");
exit();
} /*-----------------------read and write------------------*/
while(){
bzero(wrbuf,sizeof(wrbuf));
bzero(rebuf,sizeof(rebuf));
printf("Please input the info:\n");
scanf("%s",wrbuf);
if((memcmp("bye",wrbuf,))== ){
write(sockfd,wrbuf,strlen(wrbuf));
printf("Bye-bye then close the connect...\n");
break;
}
//printf("%s\n",wrbuf);
write(sockfd,wrbuf,strlen(wrbuf));
revlen = read(sockfd,rebuf,sizeof(rebuf));
rebuf[revlen] = '\0';
printf("The info from server is: %s\n",rebuf);
}
/*------------------------close--------------------------*/
close(sockfd); return ;
}
makefile文件:
main:tcpserver.c tcpclient.c
gcc -o tcpserver tcpserver.c
gcc -o tcpclient tcpclient.c
学习Linux、Unix网络编程时写的第一个程序。。。
【Linux/unix网络编程】之使用socket进行TCP编程的更多相关文章
- 【Socket编程】通过Socket实现TCP编程
通过Socket实现TCP编程 Socket通信 : 1.TCP协议是面向对象连接.可靠的.有序的,以字节流的方式发送数据. 2.基于TCP协议实现网络通信的类: 客户端----Socket类 服务器 ...
- 【LINUX/UNIX网络编程】之简单多线程服务器(多人群聊系统)
RT,Linux下使用c实现的多线程服务器.这个真是简单的不能再简单的了,有写的不好的地方,还希望大神轻拍.(>﹏<) 本学期Linux.unix网络编程的第四个作业. 先上实验要求: [ ...
- 【LINUX/UNIX网络编程】之使用消息队列,信号量和命名管道实现的多进程服务器(多人群聊系统)
RT,使用消息队列,信号量和命名管道实现的多人群聊系统. 本学期Linux.unix网络编程的第三个作业. 先上实验要求: 实验三 多进程服务器 [实验目的] 1.熟练掌握进程的创建与终止方法: 2 ...
- linux/unix网络编程之 select
转自http://www.cnblogs.com/zhuwbox/p/4221934.html linux 下的 select 知识点 unp 的第六章已经描述的很清楚,我们这里简单的说下 selec ...
- 网络编程—网络基础概览、socket,TCP/UDP协议
网络基础概览 socket概览 socket模块—TCP/UDP的实现 TCP/UDP总结 网络基础概览 osi七层协议各层主要的协议 # 物理层传输电信号1010101010 # 数据链路层,以太网 ...
- python网络-Socket之TCP编程(26)
一.TCP简介 1.TCP介绍 TCP协议,传输控制协议(英语:Transmission Control Protocol,缩写为 TCP)是一种面向连接的.可靠的.基于字节流的传输层通信协议. TC ...
- 牛客网Java刷题知识点之TCP、UDP、TCP和UDP的区别、socket、TCP编程的客户端一般步骤、TCP编程的服务器端一般步骤、UDP编程的客户端一般步骤、UDP编程的服务器端一般步骤
福利 => 每天都推送 欢迎大家,关注微信扫码并加入我的4个微信公众号: 大数据躺过的坑 Java从入门到架构师 人工智能躺过的坑 Java全栈大联盟 ...
- JAVA 通过 Socket 实现 TCP 编程
简介 TCP简介 TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的.可靠的.基于字节流的传输层通信协议,由IETF的RFC 793定义.在简化的计算机 ...
- 【Socket编程】通过Socket实现UDP编程
通过Socket实现UDP编程 UDP通信: 1.UDP协议(用户数据报协议)是无连接.不可靠.无序的. 2.UDP协议以数据报作为数据传输的载体. 3.使用UDP进行数据传输时,首先需要将要传输的数 ...
随机推荐
- [Effective JavaScript 笔记]第23条:永远不要修改arguments对象
arguments对象并不是标准的Array类型的实例.arguments对象不能直接调用Array方法. arguments对象的救星call方法 使得arguments可以品尝到数组方法的美味,知 ...
- MFC 最大化 的时候控件 按比例变大
在dlg类头文件中声明CPoint Old; 在BEGIN_MESSAGE_MAP()和END_MESSAGE_MAP()声明一个映射:ON_WM_SIZE() 这样以后就可以在M_SIZE事件的时候 ...
- Resources in Visual Tracking(转载)
这位博主总结了比较新的tracking方面的资源:http://blog.csdn.net/minstyrain/article/details/38640541 http://xilinx.eetr ...
- poj1789 Truck History
Truck History Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 20768 Accepted: 8045 De ...
- Linux CPU负载
昨天查看Nagios警报信息,发现其中一台服务器CPU负载过重,机器为CentOS系统.信息如下: 2011-2-15 (星期二) 17:50 WARNING - load average: 9.73 ...
- 一个很不错的适合PHPER们书单,推荐给大家【转】
来我博客的访客们中,有一些是PHP的初学者,是不是很迷茫PHP应该怎么学?应该买什么样的书?到处问人,到处求助?这下好了. 正好看到黑夜路人在博客上推荐了一个书单,看上去都非常不错,很多我也没有读过, ...
- 获取Ad用户信息
private]; } dt.Rows.Add(dr); } return dt; ...
- Java for LeetCode 199 Binary Tree Right Side View
Given a binary tree, imagine yourself standing on the right side of it, return the values of the nod ...
- Oracle错误代码大全
Oracle错误代码大全——最新.最全的Oracle错误代码 对快速查找oracle数据库错误原因很有帮助 ORA-00001: 违反唯一约束条件 (.) ORA-00017: 请求会话以设置跟踪事件 ...
- oracle 10g 学习之游标使用和异常介绍(11)
一.游标 1. 使用游标 要求: 打印出 80 部门的所有的员工的工资: salary: xxx declare --1. 定义游标 cursor salary_cursor is select sa ...