/*service.c*/
#include<stdio.h>
#include<stdlib.h>
#include<errno.h>
#include<string.h>
#include<sys/types.h>
#include<netinet/in.h>
#include<sys/socket.h>
#include<sys/wait.h>
#define MYPORT 8888 //开放的端口号 1到1024是保留端口
#define BACKLOG 5 //指定套接字可以接受的最大客户机请求数目
int main(void)
{
int sockfd,new_fd;
struct sockaddr_in srvaddr;
struct sockaddr_in cliaddr;
int sin_size;
//创建套接字描述符
if((sockfd=socket(AF_INET,SOCK_STREAM,0)) == -1)
{
perror("socket error");
exit(1);
}
bzero(&srvaddr,sizeof(srvaddr));
//用自己的ip地址和端口信息填充一个internet套接字地址结构
srvaddr.sin_family = AF_INET;
srvaddr.sin_port = htons(MYPORT);
//函数bind将服务器的地址和套接字绑定在一起
if(bind(sockfd,(struct sockaddr *)&srvaddr,sizeof(struct sockaddr)) == -1)
{
perror("bind error");
exit(1);
}
//listen函数告诉内核,这个套接字可以接受来自客户机的请求
if(listen(sockfd,BACKLOG) == -1)
{
perror("listen error");
exit(1);
}
//处理客户机的请求,使用函数accept来获得一个客户机的连接
for(;;)
{
sin_size = sizeof(struct sockaddr_in);
if((new_fd = accept(sockfd,(struct sockaddr *)&cliaddr,&sin_size)) == -1)
{
perror("accept error");
continue;
}
printf("server:got connection from %s\n",inet_ntoa(cliaddr.sin_addr));
//向客户端写数据
if(write(new_fd,"Hello,Network!\n",14) == -1)
perror("write error!");
close(new_fd);
}
close(sockfd);
return 0;
}
/*client.c*/
#include<stdio.h>
#include<stdlib.h>
#include<errno.h>
#include<string.h>
#include<netdb.h>
#include<sys/types.h>
#include<netinet/in.h>
#include<sys/socket.h>
#define PORT 8888
#define MAXDATASIZE 5000
int main(int argc,char **argv)
{
int sockfd,nbytes;
char buf[1024];
struct hostent *he;
struct sockaddr_in srvaddr;
if(argc != 2)
{
perror("Usage:client hostname.\n");
exit(1);
}
//函数gethostbyname获得指定域名地址所对应的ip地址
if((he = gethostbyname(argv[1])) == NULL)
{
perror("gethostbyname");
exit(1);
}
//创建套接字,返回套接字描述符
if((sockfd = socket(AF_INET,SOCK_STREAM,0)) == -1)
{
perror("create socket error");
exit(1);
}
bzero(&srvaddr,sizeof(srvaddr));
//用获得的远程服务器进程的ip地址和端口号来填充一个Internet套接字地址结构
srvaddr.sin_family = AF_INET;
srvaddr.sin_port = htons(PORT);
srvaddr.sin_addr = *((struct in_addr *)he -> h_addr);
//用connect于这个远程服务器建立一个internet连接
if(connect(sockfd,(struct sockaddr *)&srvaddr,sizeof(struct sockaddr)) == -1)
{
perror("connect error");
exit(1);
}
//调用read函数读取服务器write过来的信息
if((nbytes = read(sockfd,buf,MAXDATASIZE)) == -1)
{
perror("read error");
exit(1);
}
buf[nbytes] = '\0';
printf("read:%s\n",buf);
close(sockfd);
return 0;
}
cc service.c -o service -lsocket
./service
cc client.c -o client -lsocket
./client 127.0.0.1
分享到:
相关推荐
Linux-socket网络编程基础完整版资料.ppt
linux编程及应用-任继平12第12章linuxsocket网络编程基础.ppt
关于TCP/IP socket编程基础ppt,适合初学者
1、介绍IP、端口和套接字等网络编程基础知识; 2、讲解和演示简单的UDP通讯软件的开发过程;
初学者可以看看,关于网络套接字编程的,写的比较简单,自己可以修改修改
socket网络编程基础,其中包含了一些源码和PPT的讲解
socket网络编程 socket编程的基础入门
socket的TCP与UDP编程示例
主要介绍了Java的Socket网络编程基础知识入门教程,包括基于TCP/IP和UDP协议的简单实例程序讲解,需要的朋友可以参考下
网络通信协议,网络通信基础知识,socket网络编程的一些基础知识,Socket网络编程学习笔记,网络编程总结,2011-学习资料大全:java_socket编程,学习网络编程的十个步骤,socket编程入门(经典版),Unix_网络编程...
C++网络编程基础socket
自己整理的SOCKET网络编程基本知识,一些最基础的,适合入门人员进入看看这些文档,其中重点也帮用红色标志好
网络socket编程集锦,程序经过Linux平台PC上用 GNU 的gcc 成功编译过,适合新手学习借鉴。
Socket网络编程指导 JavaSocket编程基础入门
1. 了解socket类的网络编程技术; 2. 熟悉socket客户端与服务器端通信的结构和工作原理; 3. 掌握TCP传递消息的机制; 4. 开拓创新意识,培养独立动手操作的能力。 二、实验内容 本实验通过一个简单的网络应用来...
C++网络编程基础socket[整理].pdf
socket网络编程基础