TCP的socket的服务器端和客户端实例(linux下)
来源:互联网 发布:易语言qq自动回复源码 编辑:程序博客网 时间:2024/06/05 15:09
TCP的socket的服务器端和客户端实例:
1、服务器端步骤:
socket()->bind()->listen()->accept()->read()->write()->close()
2、客户端步骤:
socket()->connect()->write()->read()->close()
服务器端代码:
#include <sys/socket.h>#include <sys/types.h>#include <unistd.h> #include <arpa/inet.h>#include <netinet/in.h>#include <errno.h>#include <strings.h>#include <ctype.h> char host_name[20];int port = 8000;int main(){ struct sockaddr_in sin,pin; int sock_descriptor,temp_sock_descriptor,address_size; int i , len , on=1; char buf[16384]; sock_descriptor = socket(AF_INET,SOCK_STREAM,0); bzero(&sin,sizeof(sin)); sin.sin_family = AF_INET; sin.sin_addr.s_addr = INADDR_ANY; sin.sin_port = htons(port); if(bind(sock_descriptor,(struct sockaddr *)&sin,sizeof(sin)) == -1) { perror("call to bind"); exit(1); } if(listen(sock_descriptor,100) == -1) { perror("call to listem"); exit(1); } printf("Accpting connections...\n"); while(1) { address_size = sizeof(pin); temp_sock_descriptor = accept(sock_descriptor,(struct sockaddr *)&pin,&address_size); if(temp_sock_descriptor == -1) { perror("call to accept"); exit(1); } if(recv(temp_sock_descriptor,buf,16384,0) == -1) { perror("call to recv"); exit(1); } inet_ntop(AF_INET,&pin.sin_addr,host_name,sizeof(host_name)); printf("received from client(%s):%s\n",host_name,buf); len = strlen(buf); for(i = 0 ; i < len ; i++) { buf[i] = toupper(buf[i]); } if(send(temp_sock_descriptor,buf,len+1,0) == -1) { perror("call to send"); exit(1); } close(temp_sock_descriptor); }}
客户端代码:
#include <stdio.h>#include <stdlib.h>#include <string.h>#include <sys/socket.h>#include <sys/types.h>#include <unistd.h>#include <arpa/inet.h>#include <netinet/in.h>#include <errno.h>#include <strings.h>#include <ctype.h>char * host_name = "127.0.0.1";int port = 8000;int main(int argc , char * argv[]){ char buf[8192]; //char message[256]; int socket_descriptor; struct sockaddr_in pin; char * str ="A default test string"; if(argc < 2) { printf("we will send a default test string.\n"); } else { str = argv[1]; if(argc == 3) { host_name = argv[2]; } } bzero(&pin,sizeof(pin)); pin.sin_family = AF_INET; inet_pton(AF_INET,host_name,&pin.sin_addr); pin.sin_port = htons(port); if((socket_descriptor = socket(AF_INET,SOCK_STREAM,0)) == -1) { perror("error opening socket \n"); exit(1); } if(connect(socket_descriptor,(struct sockaddr * )&pin,sizeof(pin)) == -1) { perror("error connecting to socket \n"); exit(1); } printf("sending message %s to server ..\n",str); if( write(socket_descriptor,str,strlen(str)+1) == -1 ) { perror("error in send \n"); exit(1); } printf("..sent message ...wait for message..\n"); if( read(socket_descriptor,buf,8192) == -1 ) { perror("error in receiving response from server \n"); exit(1); } printf("\nResponse from server:\n\n%s\n",buf); close(socket_descriptor); return 1;}
运行结果:
服务器端:
[root@rac2 ~]# ./server_iter Accpting connections...received from client(127.0.0.1):A default test stringreceived from client(127.0.0.1):yang
客户端:
[root@rac2 ~]# ./client_iter we will send a default test string.sending message A default test string to server ....sent message ...wait for message..Response from server:A DEFAULT TEST STRING[root@rac2 ~]# ./client_iter yang 127.0.0.1sending message yang to server ....sent message ...wait for message..Response from server:YANG[root@rac2 ~]#
- TCP的socket的服务器端和客户端实例(linux下)
- 基于TCP的客户端、服务器端socket编程
- ios socket编程的客户端和服务器端通信简单实例
- linux socket tcp server 解决客户端socket断开后, 服务器端进程退出的问题
- 【Java Socket】入门系列 3.2.编程实现基于 TCP 的 Socket 通信 — 服务器端和客户端
- 网络编程Tcp的客户端和服务器端
- TCP传输客户端和服务器端的建立
- 实现服务器端和客户端的Socket通信
- C++ 简单的 Tcp 实现[socket] 服务器端与客户端通信
- Linux下的异步TCP socket及实例
- 实例:linux下实现简单的socket 客户端 服务端
- Socket通信 客户端和服务器端的通信 客户端
- python 使用socket模拟tcp客户端和tcp服务器端
- Linux Tcp客户端和服务器端代码实现
- linux 使用c在tcp socket服务器端获取客户端ip
- TCP 客户端和服务器端
- TCP,UDP客户端和服务器端编程的一般步骤
- 基于tcp的服务器端和客户端简单版
- 单链表
- 【jbpm3.2.3】之二 sample
- Java SE 自学笔记3 之数组
- 堆排序C语言实现
- 认识feof的微妙
- TCP的socket的服务器端和客户端实例(linux下)
- Android中的visibility属性的区别
- 码农的恋爱观:只有程序员能看懂
- 双链表
- 常用Eclipse快捷键
- CmdletBindingAttribute之HelpURI的作用
- 不错的matlab网站(更新ing)
- 2012年软件开发者薪资调查报告
- 代码清单5-1使用raw_input()得到一个字符串