实验一 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编程的更多相关文章

  1. 【Socket编程】通过Socket实现TCP编程

    通过Socket实现TCP编程 Socket通信 : 1.TCP协议是面向对象连接.可靠的.有序的,以字节流的方式发送数据. 2.基于TCP协议实现网络通信的类: 客户端----Socket类 服务器 ...

  2. 【LINUX/UNIX网络编程】之简单多线程服务器(多人群聊系统)

    RT,Linux下使用c实现的多线程服务器.这个真是简单的不能再简单的了,有写的不好的地方,还希望大神轻拍.(>﹏<) 本学期Linux.unix网络编程的第四个作业. 先上实验要求: [ ...

  3. 【LINUX/UNIX网络编程】之使用消息队列,信号量和命名管道实现的多进程服务器(多人群聊系统)

    RT,使用消息队列,信号量和命名管道实现的多人群聊系统. 本学期Linux.unix网络编程的第三个作业. 先上实验要求: 实验三  多进程服务器 [实验目的] 1.熟练掌握进程的创建与终止方法: 2 ...

  4. linux/unix网络编程之 select

    转自http://www.cnblogs.com/zhuwbox/p/4221934.html linux 下的 select 知识点 unp 的第六章已经描述的很清楚,我们这里简单的说下 selec ...

  5. 网络编程—网络基础概览、socket,TCP/UDP协议

    网络基础概览 socket概览 socket模块—TCP/UDP的实现 TCP/UDP总结 网络基础概览 osi七层协议各层主要的协议 # 物理层传输电信号1010101010 # 数据链路层,以太网 ...

  6. python网络-Socket之TCP编程(26)

    一.TCP简介 1.TCP介绍 TCP协议,传输控制协议(英语:Transmission Control Protocol,缩写为 TCP)是一种面向连接的.可靠的.基于字节流的传输层通信协议. TC ...

  7. 牛客网Java刷题知识点之TCP、UDP、TCP和UDP的区别、socket、TCP编程的客户端一般步骤、TCP编程的服务器端一般步骤、UDP编程的客户端一般步骤、UDP编程的服务器端一般步骤

    福利 => 每天都推送 欢迎大家,关注微信扫码并加入我的4个微信公众号:   大数据躺过的坑      Java从入门到架构师      人工智能躺过的坑         Java全栈大联盟   ...

  8. JAVA 通过 Socket 实现 TCP 编程

    简介 TCP简介 TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的.可靠的.基于字节流的传输层通信协议,由IETF的RFC 793定义.在简化的计算机 ...

  9. 【Socket编程】通过Socket实现UDP编程

    通过Socket实现UDP编程 UDP通信: 1.UDP协议(用户数据报协议)是无连接.不可靠.无序的. 2.UDP协议以数据报作为数据传输的载体. 3.使用UDP进行数据传输时,首先需要将要传输的数 ...

随机推荐

  1. [Effective JavaScript 笔记]第23条:永远不要修改arguments对象

    arguments对象并不是标准的Array类型的实例.arguments对象不能直接调用Array方法. arguments对象的救星call方法 使得arguments可以品尝到数组方法的美味,知 ...

  2. MFC 最大化 的时候控件 按比例变大

    在dlg类头文件中声明CPoint Old; 在BEGIN_MESSAGE_MAP()和END_MESSAGE_MAP()声明一个映射:ON_WM_SIZE() 这样以后就可以在M_SIZE事件的时候 ...

  3. Resources in Visual Tracking(转载)

    这位博主总结了比较新的tracking方面的资源:http://blog.csdn.net/minstyrain/article/details/38640541 http://xilinx.eetr ...

  4. poj1789 Truck History

    Truck History Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 20768   Accepted: 8045 De ...

  5. Linux CPU负载

    昨天查看Nagios警报信息,发现其中一台服务器CPU负载过重,机器为CentOS系统.信息如下: 2011-2-15 (星期二) 17:50 WARNING - load average: 9.73 ...

  6. 一个很不错的适合PHPER们书单,推荐给大家【转】

    来我博客的访客们中,有一些是PHP的初学者,是不是很迷茫PHP应该怎么学?应该买什么样的书?到处问人,到处求助?这下好了. 正好看到黑夜路人在博客上推荐了一个书单,看上去都非常不错,很多我也没有读过, ...

  7. 获取Ad用户信息

    private];                }                dt.Rows.Add(dr);            }            return dt;        ...

  8. 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 ...

  9. Oracle错误代码大全

    Oracle错误代码大全——最新.最全的Oracle错误代码 对快速查找oracle数据库错误原因很有帮助 ORA-00001: 违反唯一约束条件 (.) ORA-00017: 请求会话以设置跟踪事件 ...

  10. oracle 10g 学习之游标使用和异常介绍(11)

    一.游标 1. 使用游标 要求: 打印出 80 部门的所有的员工的工资: salary: xxx declare --1. 定义游标 cursor salary_cursor is select sa ...