Linux服务器、客户端

#include <stdio.h>         //标准输入输出头文件
#include <sys/socket.h>    //与套接字相关的函数声明和结构定义
#include <netinet/in.h>    //某些结构体声明、宏定义
#include <arpa/inet.h>    //某些函数声明
#include <errno.h>      //查看错误代码
/*以上为包含必要的头文件,其中几个头文件是几乎每一个网络程序所必需的,如<sys/socket.h>,<netinet/in.h>等*/

int main(int argc,char *argv[])
{
 printf("=======================================\n");
 printf("=       My first server program       =\n");
 printf("=======================================\n");

 int sockfd,new_fd;
 struct sockaddr_in server_addr;
 struct sockaddr_in client_addr;
 int sin_size,portnumber;
 char hello[]="Hello, The Network! This is my first Server.\n";

 if (argc!=2){
   fprintf(stderr,"Usage:%s  portnumber \a\n",argv[0]);
   exit(1);  //程序出现错误结束
 }

if ((portnumber=atoi(argv[1]))<0){
   fprintf(stderr,"Usage:%s  portnumber \a\n",argv[0]);
   exit(1);
 }   //atoi()将字符型转化为整型

 //建立socket描述符(intnet协议簇,流套接字,使用默认协议)
 if ((sockfd=socket(AF_INET,SOCK_STREAM,0))==-1){
   fprintf(stderr,"Socket error:%s \a\n",strerror(errno));
   exit(1);
 }
//填充服务器的套接字地址结构sockaddr
 bzero(&server_addr,sizeof (struct sockaddr_in));
 server_addr.sin_family=AF_INET;
 server_addr.sin_addr.s_addr=htonl(INADDR_ANY);
 server_addr.sin_port=htons(portnumber);

 //开始捆绑sockfd描述符
 if (bind(sockfd,(struct sockaddr *)(&server_addr),sizeof (struct sockaddr))==-1){
   fprintf(stderr,"Bind error:%s \a\n",strerror(errno));
   exit(1);
 }

 //监听sockfd描述符
if (listen(sockfd,5)==-1){
   //fprintf(stderr,"Listen error:%s \a\n",strerror(errno));
   exit(1);
 } 

 while(1) {
//阻塞服务器,直到客户程序建立连接
   sin_size=sizeof (struct sockaddr_in);
   if ((new_fd=accept(sockfd,(struct sockaddr*)(&client_addr),&sin_size))==-1){
     //fprintf(stderr,"Accept error:%s \a\n",strerror(errno));
     exit(1);
   }

     fprintf(stderr,"Server get connection from %s :\n",inet_ntoa(client_addr.sin_addr));
     if (write(new_fd,hello,strlen(hello))==-1){
       //fprintf(stderr,"Write error:%s \a\n",strerror(errno));
       exit(1);
     }
     //通信结束,继续循环执行
     close(new_fd);
/*当服务器处理完这个客户机请求后,关闭连接套接字*/
}
//关闭监听套接字描述符
 close(sockfd);
 exit(0);

}
#include <stdio.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <errno.h>
#include <netdb.h>     /*包括结构hostent(主机环境),获得主机信息的几个函数*/

int main(int argc,char *argv[])
{
 printf("=======================================\n");
 printf("=       My first client program!      =\n");
 printf("=======================================\n");

 int sockfd,new_fd;
 struct sockaddr_in server_addr;
 struct hostent *host;
 int nbytes,portnumber;
 char buffer[1024];

 if (argc!=3){
   fprintf(stderr,"Usage:%s hostname portnumber \a\n",argv[0]);
   exit(1);
 }

//获得服务器地址
 if ((host=gethostbyname(argv[1]))==NULL){
   fprintf(stderr,"HostName Erro!");
   exit(1);
 }

 if ((portnumber=atoi(argv[2]))<0){
   fprintf(stderr,"Usage:%s hostname  portnumber \a\n",argv[0]);
   exit(1);
 }

 //建立客户端Sockfd描述符
 if ((sockfd=socket(AF_INET,SOCK_STREAM,0))==-1){
   fprintf(stderr,"Socket error:%s \a\n",strerror(errno));
   exit(1);
 }

//调用函数connect之前,需要指定服务器进程的套接字地址
//填充sockaddr结构
 bzero(&server_addr,sizeof (struct sockaddr_in));
 server_addr.sin_family=AF_INET;
 server_addr.sin_port=htons(portnumber);
// server_addr.sin_addr= *((struct in_addr *) host->h_addr);

//发起连接请求与远程服务器建立一个连接
 if (connect(sockfd,(struct sockaddr *)(&server_addr),sizeof (struct sockaddr))==-1){
   fprintf(stderr,"Bind error:%s \a\n",strerror(errno));
   exit(1);
 }

 //进行读写数据操作,将数据显示到标准输出上
 if ((nbytes=read(sockfd,buffer,1024))==-1){
   fprintf(stderr,"Read error: %s  \n",strerror(errno));
   exit(1);
 }

 buffer[nbytes]=‘\\‘;
   printf("收到: %s \n",buffer);
//结束通信
//关闭连接
 close(sockfd);
 exit(0);

}
时间: 2024-10-13 21:58:29

Linux服务器、客户端的相关文章

解决linux ssh客户端SSH连接linux服务器很慢的问题

在linux上使用ssh客户端连接另一台的linux服务器时,出现了连接慢的情况.但是换一台客户端去连发现速度正常.推测ssh客户端出现为问题. 于是使用使用ssh -v  IP 调试,果然发现问题.输出如下: [[email protected] ~]# ssh -v 10.60.9.32 OpenSSH_5.3p1, OpenSSL 1.0.1e-fips 11 Feb 2013 debug1: Reading configuration data /etc/ssh/ssh_config d

kafka环境搭建二---Windows客户端Linux服务器

一.对于服务器端的搭建可以参考上一篇文章:kafka单机版环境搭建与测试 服务器端IP :10.0.30.221 运行环境的目录如下: 需要改动config文件夹下的server.properties中的以下两个属性 zookeeper.connect=localhost:2181改成zookeeper.connect=10.0.30.221:2181 以及默认注释掉的 #host.name=localhost改成host.name=10.0.30.221 host.name不更改会造成客户端报

连接Linux服务器:Win免费SSH客户端工具

连接Linux服务器:Win免费SSH客户端工具 http://blog.csdn.net/jiangdou88/article/details/51585555

linux 客户端与linux服务器端连接与文件上传下载

linux客户端连接linux服务器 用ssh 可以用 man ssh 查看用法 基本格式: ssh 用户名@主机名 如: ssh [email protected] linux客户端上传文件到 linux 服务器 用scp使命令(secrete copy) 基本格式: scp [-r] 本地文件[夹]路径 用户名@主机名:远程主机目录路径 如: scp /home/lin3615/test.txt 用户名@IP:/usr/www 如果是文件夹,则 scp -r /home/lin3615/di

java服务器与linux c客户端之间udp通信

java服务器和 linux c客户端采用udp协议互相通信,最关键的点是数据结构的统一.比如说,在c中一个char型 是8bit,在java中,char 是16bit,所以c和java的char类型不能直接互相转换.在本例程中,c的char 类型和 java的byte类型,两个数据类型都是8bit,这样就保证了数据正确传输的基本条件之一. java服务器代码如下: import java.io.*; import java.lang.*; import java.net.*; public c

Linux服务器操作系统

Linux服务器操作系统 今日大纲 ●    服务器操作系统的系列.Linux的主流产品.虚拟机软件 ●    安装linux ●    linux基本命令 ●    用户管理及权限(多用户) ●    实战(搭建环境及部署web项目) ***************************************************************************************************** 1.    服务器操作系统简介 1.1    服务器操作系

Linux服务器开发常用的命令以及遇到的问题

1. 什么是linux服务器load average? Load是用来度量服务器工作量的大小,即计算机cpu任务执行队列的长度,值越大,表明包括正在运行和待运行的进程数越多.参考资料:http://en.wikipedia.org/wiki/Load_average 2. 如何查看linux服务器负载 可以通过w,top,uptime,procinfo命令,也可以通过/proc/loadavg文件查看. 3. 服务器负载高怎么办? 服务器负载(load/load average)是根据进程队列的

Linux服务器上的MySQL数据库宕掉的原因

生产环境: 操作系统:CentOS release 6.8 数据库系统:MySQL 5.5.52 分析问题: 一.客户端访问出现以下错误: 错误1:浏览器访问Cacti监控系统 FATAL: Cannotconnect to MySQL server on 'localhost'. Please make sure you have specified avalid MySQL database name in 'include/config.php' 错误2:浏览器访问Discuz系统 Dis

widows本地-xshell实现远程连接linux服务器图形界面

本地环境远程连接linux图形界面,常用的实现工具有,VNC.Puty.Xshell等,这里我们用的xshell manager: Xmanager简介:Xmanager是一个运行于 Windows平台上的高性能的X Server软件.它能把远端Unix/Linux的桌面无缝地带到你的Windows上,甚至电脑是在内网或防火墙后,也能通过SSH协议安全的运行远端的X应用程序. 特点包括: 可通过Xcongfig工具设置多个Xmanager设置: 支持多用户的Windows终端环境: 支持多个IP

Linux与云计算——第二阶段Linux服务器架设 第六章:目录Directory服务器架设—FreeIPA

Linux与云计算--第二阶段Linux服务器架设 第六章:目录Directory服务器架设-FreeIPA 1 FreeIPA 配置FreeIPA服务器 Configure IPA Server to share users' account in your local network. [1] Install FreeIPA. [[email protected] ~]# yum -y install ipa-server ipa-server-dns bind bind-dyndb-lda