您的位置:首页 > 理论基础 > 计算机网络

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#
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: