linux之TCP/IP--简单一发送一接收(1)
2011-11-18 14:01
357 查看
现在是网络社会,学linux不会tcp/ip,心里老感觉空空的。所以也要认真好好学习这个东东了。
实验目的:实现客户端发送,服务器接收
===========server===================
#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 3333
int main(int argc, char *argv[])
{
int sockfd;
struct sockaddr_in server_addr;
struct sockaddr_in client_addr;
int sin_size;
char buf[100];
sockfd = socket(AF_INET,SOCK_STREAM,0); //创建套接字
if(sockfd == -1)
{
fprintf(stderr,"Socket error:%s\n",strerror(errno));
exit(1);
}
bzero(&server_addr,sizeof(struct sockaddr_in)); //置字节字符串s的前n个字节为零且包括‘\0’
server_addr.sin_family = AF_INET;
server_addr.sin_addr.s_addr = htonl(INADDR_ANY); //任何ip都可连上,我是开放滴
server_addr.sin_port = htons(PORT);
int on=1;
setsockopt(sockfd,SOL_SOCKET,SO_REUSEADDR,&on,sizeof(on)); //这个作用,你可以去掉再试试
if(bind(sockfd,(struct sockaddr *)(&server_addr),sizeof(struct sockaddr_in))==-1) //绑定
{
fprintf(stderr,"Bind error:%s\n",strerror(errno));
exit(1);
}
if(listen(sockfd,20)==-1) //监听,还20个
{
fprintf(stderr,"listen error:%s\n",strerror(errno));
exit(1);
}
int new_fd;
pid_t child;
int r_size;
int w_size;
while(1)
{
printf("wait!!!!!\n");
memset(buf,0,100);
sin_size = sizeof(struct sockaddr_in);
if((new_fd=accept(sockfd,(struct sockaddr *)(&client_addr),&sin_size))==-1) //接收,看是否有人连上
{
fprintf(stderr,"Accept error:%s\n",strerror(errno));
exit(1);
}
fprintf(stderr,"Server get connection from %s\n",inet_ntoa(client_addr.sin_addr));
if((r_size=read(new_fd,buf,100))==-1) //读取数据
{
fprintf(stderr,"Read error:%s\n",strerror(errno));
exit(1);
}
printf("Received information%d::%s\n",r_size,buf);
}
close(sockfd);
exit(0);
}
===========client====================
#include <stdlib.h>
#include <stdio.h>
#include <errno.h>
#include <string.h>
#include <netdb.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <sys/socket.h>
#define PORT 3333
int main(int argc, char *argv[])
{
int sockfd;
char buf[100];
struct sockaddr_in server_addr;
struct hostent *host;
sockfd = socket(AF_INET,SOCK_STREAM,0); //创建套接字
if(sockfd==-1)
{
fprintf(stderr,"Socket error:%s\n",strerror(errno));
exit(1);
}
bzero(&server_addr,sizeof(server_addr)); //置字节字符串s的前n个字节为零且包括‘\0’
server_addr.sin_family=AF_INET;
server_addr.sin_port=htons(PORT);
server_addr.sin_addr.s_addr=inet_addr("192.168.1.155"); //ip是要连接的服务器ip
int con_flag;
con_flag=connect(sockfd,(struct sockaddr *)(&server_addr),sizeof(struct sockaddr)); //连接
if(con_flag==-1)
{
fprintf(stderr,"Connect Error:%s\a\n",strerror(errno));
exit(1);
}
printf("Please input some words:");
fgets(buf,100,stdin);
if(write(sockfd,buf,sizeof(buf))<0) //往得到的套接字接口里写数据
{
fprintf(stderr,"write Error:%s\a\n",strerror(errno));
exit(1);
}
close(sockfd); //请关闭
exit(0);
}
实验结果如下:
root@wyz-vlinux:~/test/sc# ./tcp_server
Server get connection from 192.168.1.155
Server received hello mama
Server get connection from 192.168.1.155
Server received i love linux
root@wyz-vlinux:~/test# ./tcp_client
Please input some words:hello mama
root@wyz-vlinux:~/test# ./tcp_client
Please input some words:i love linux
root@wyz-vlinux:~/test#
实验目的:实现客户端发送,服务器接收
===========server===================
#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 3333
int main(int argc, char *argv[])
{
int sockfd;
struct sockaddr_in server_addr;
struct sockaddr_in client_addr;
int sin_size;
char buf[100];
sockfd = socket(AF_INET,SOCK_STREAM,0); //创建套接字
if(sockfd == -1)
{
fprintf(stderr,"Socket error:%s\n",strerror(errno));
exit(1);
}
bzero(&server_addr,sizeof(struct sockaddr_in)); //置字节字符串s的前n个字节为零且包括‘\0’
server_addr.sin_family = AF_INET;
server_addr.sin_addr.s_addr = htonl(INADDR_ANY); //任何ip都可连上,我是开放滴
server_addr.sin_port = htons(PORT);
int on=1;
setsockopt(sockfd,SOL_SOCKET,SO_REUSEADDR,&on,sizeof(on)); //这个作用,你可以去掉再试试
if(bind(sockfd,(struct sockaddr *)(&server_addr),sizeof(struct sockaddr_in))==-1) //绑定
{
fprintf(stderr,"Bind error:%s\n",strerror(errno));
exit(1);
}
if(listen(sockfd,20)==-1) //监听,还20个
{
fprintf(stderr,"listen error:%s\n",strerror(errno));
exit(1);
}
int new_fd;
pid_t child;
int r_size;
int w_size;
while(1)
{
printf("wait!!!!!\n");
memset(buf,0,100);
sin_size = sizeof(struct sockaddr_in);
if((new_fd=accept(sockfd,(struct sockaddr *)(&client_addr),&sin_size))==-1) //接收,看是否有人连上
{
fprintf(stderr,"Accept error:%s\n",strerror(errno));
exit(1);
}
fprintf(stderr,"Server get connection from %s\n",inet_ntoa(client_addr.sin_addr));
if((r_size=read(new_fd,buf,100))==-1) //读取数据
{
fprintf(stderr,"Read error:%s\n",strerror(errno));
exit(1);
}
printf("Received information%d::%s\n",r_size,buf);
}
close(sockfd);
exit(0);
}
===========client====================
#include <stdlib.h>
#include <stdio.h>
#include <errno.h>
#include <string.h>
#include <netdb.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <sys/socket.h>
#define PORT 3333
int main(int argc, char *argv[])
{
int sockfd;
char buf[100];
struct sockaddr_in server_addr;
struct hostent *host;
sockfd = socket(AF_INET,SOCK_STREAM,0); //创建套接字
if(sockfd==-1)
{
fprintf(stderr,"Socket error:%s\n",strerror(errno));
exit(1);
}
bzero(&server_addr,sizeof(server_addr)); //置字节字符串s的前n个字节为零且包括‘\0’
server_addr.sin_family=AF_INET;
server_addr.sin_port=htons(PORT);
server_addr.sin_addr.s_addr=inet_addr("192.168.1.155"); //ip是要连接的服务器ip
int con_flag;
con_flag=connect(sockfd,(struct sockaddr *)(&server_addr),sizeof(struct sockaddr)); //连接
if(con_flag==-1)
{
fprintf(stderr,"Connect Error:%s\a\n",strerror(errno));
exit(1);
}
printf("Please input some words:");
fgets(buf,100,stdin);
if(write(sockfd,buf,sizeof(buf))<0) //往得到的套接字接口里写数据
{
fprintf(stderr,"write Error:%s\a\n",strerror(errno));
exit(1);
}
close(sockfd); //请关闭
exit(0);
}
实验结果如下:
root@wyz-vlinux:~/test/sc# ./tcp_server
Server get connection from 192.168.1.155
Server received hello mama
Server get connection from 192.168.1.155
Server received i love linux
root@wyz-vlinux:~/test# ./tcp_client
Please input some words:hello mama
root@wyz-vlinux:~/test# ./tcp_client
Please input some words:i love linux
root@wyz-vlinux:~/test#
相关文章推荐
- linux原始套接字(3)-构造IP_TCP发送与接收
- Linux TCP/IP 协议栈源码分析 - 数据 发送/接收 流程图
- linux下基于tcp的简单的接收与发送程序,开发板与本机接收与发送信息
- Linux基于TCP/IP简单的客户端、服务器通信程序实例
- C#TCPClient应用-一个简单的消息发送和接收
- 关于linux下的udp/tcp通信设置发送sendto/接收recvfrom信息超时的参数。解决通道堵塞问题。
- LINUX C 的TCP发送接收测试
- java 简单的TCP接收数据与发送数据
- 透彻理解LINUX下TCP的发送缓冲区接收缓冲区与滑动窗口
- Linux中TCP和UDP发送和接收缓冲区
- Java-TCP/IP 编程-01 主线程:从控制台录入消息,发送到服务器 子线程:接收服务器转发来的消息
- 关于Linux中TCP和UDP协议的发送和接收缓冲区
- linux下TCP/IP实现简单聊天程序
- 基于linux简单的TCP/IP网络通信代码
- UDP和TCP通信机制(实现简单的数据发送与接收)
- Linux下,tcp 最大发送和接收缓存的查看和修改
- TCP/IP学习(27)——协议初始化与简要的接收/发送流程
- (3) linux 3.x - client - TCP连接建立系列 — 客户端接收SYNACK和发送ACK
- Linux下UDP的组播接收和发送的简单例子
- Java TCP/IP之UDP 套接字发送和接收信息