[000]socket通信--server和client实现的简单例子

在C语言中就学过scanf和printf,其实理解socket就跟这两个输入输出差不多,只不过是信息的传输而已。

1.TCP服务器端(server)的默认函数调用顺序:

按照上述的调用顺序,我们可以来写个最简单的"hello world" server程序。

 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 #include<string.h>
 4 #include<unistd.h>
 5 #include<arpa/inet.h>
 6 #include<sys/socket.h>
 7
 8 void error_handling(char* message);
 9
10 void error_handling(char* message) {
11     fputs(message, stderr);
12     fputc(‘\n‘, stderr);
13     exit(1);
14 }
15
16 int main(int argc, char **argv)
17 {
18     int serv_sock;
19      int clnt_sock;
20
21     //设置一个server地址serv_addr,client地址clnt_addr
22     struct sockaddr_in serv_addr;
23     struct sockaddr_in clnt_addr;
24     socklen_t clnt_addr_size = sizeof(clnt_addr);
25
26     memset(&serv_addr, 0, sizeof(serv_addr));
27     memset(&serv_addr, 0, sizeof(serv_addr));
28     char message[] = "Hello world";
29
30     if (argc != 2) {
31         printf("Usage : %s <port>\n", argv[0]);
32         exit(1);
33     }
34
35     //创建用于internet的流协议(TCP)socket
36     serv_sock = socket(PF_INET, SOCK_STREAM, 0);
37     if (serv_sock == -1) {
38         error_handling("socket() error");
39     }
40
41     serv_addr.sin_family = AF_INET;
42     serv_addr.sin_addr.s_addr = htonl(INADDR_ANY);
43     serv_addr.sin_port = htons(atoi(argv[1]));
44
45     //把socket和socket地址结构联系起来
46     if( bind(serv_sock,(struct sockaddr*)&serv_addr,sizeof(serv_addr)) == -1) {
47         error_handling("bind() error");
48     }
49
50     //server_socket用于监听
51     if ( listen(serv_sock, 5) == -1) {
52         error_handling("lisen() error");
53     }
54
55     // 受理连接请求
56     clnt_sock = accept(serv_sock,(struct sockaddr*)&clnt_addr,&clnt_addr_size);
57     if ( clnt_sock == -1) {
58         error_handling("accept() error");
59     }
60
61     write(clnt_sock, message, sizeof(message));
62     close(clnt_sock);
63     close(serv_sock);
64
65     return 0;
66 }

2.与server端相对应的是客户端,其调用顺序为:

相对应的“hello world”client端程序就为:

 1 hello_client.c
 2 ------
 3 #include<stdio.h>
 4 #include<stdlib.h>
 5 #include<string.h>
 6 #include<unistd.h>
 7 #include<arpa/inet.h>
 8 #include<sys/socket.h>
 9
10 void error_handling(char* message);
11
12 void error_handling(char* message) {
13     fputs(message, stderr);
14     fputc(‘\n‘, stderr);
15     exit(1);
16 }
17
18 int main(int argc, char **argv) {
19     int sock;
20     struct sockaddr_in serv_addr;
21     char message[30];
22     int str_len;
23     memset(&serv_addr, 0, sizeof(serv_addr));
24
25     if (argc != 3)
26     {
27         printf("Usage: /%s <IP> <Port>\n",argv[0]);
28         exit(1);
29     }
30
31     //创建用于internet的流协议(TCP)socket
32     sock = socket(PF_INET, SOCK_STREAM, 0);
33     if (sock == -1) {
34         error_handling("socket() error");
35     }
36
37     //设置一个socket地址结构client_addr,代表客户机internet地址, 端口
38     serv_addr.sin_family = AF_INET;
39     serv_addr.sin_addr.s_addr = inet_addr(argv[1]);
40     serv_addr.sin_port = htons(atoi(argv[2]));
41
42     //把socket和socket地址结构联系起来
43     if( connect(sock,(struct sockaddr*)&serv_addr,sizeof(serv_addr)) == -1) {
44         error_handling("connect() error");
45     }
46
47     str_len = read(sock, message, sizeof(message) - 1);
48     if (str_len == -1) {
49         error_handling("read() error");
50     }
51
52     printf("Message from server : %s \n", message);
53     close(sock);
54     return 0;
55 }

开始运行服务器端:

#gcc hello_server.c -o hserver
#./hserver 9010
......开始挂起

开始运行客户端:

#gcc hello_client.c -o hclient
#./hclient 127.0.0.1 9010
Message from server: Hello world
时间: 2024-11-07 23:53:12

[000]socket通信--server和client实现的简单例子的相关文章

[001]socket通信--server和client实现迭代的简单例子

server端: 1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<string.h> 4 #include<unistd.h> 5 #include<arpa/inet.h> 6 #include<sys/socket.h> 7 8 #define BUFF_SIZE 1024 9 void error_handling(char* message); 10 11 void er

socket套接字的学习与简单应用

socket套接字 Socket又称为套接字,它是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口提高了效率 socket就是一个模块.我们通过调用模块中已经实现的方法建立两个进程之间的连接和通信.也 为什么存在socket抽象层? 如果直接与操作系统数据交互非常麻烦,繁琐,socket对这些繁琐的的操作高度的封装,简化. socket在python中就是一个模块. 基于文件类型的套接字家族 套接字家族的名字:AF_UNIX unix一切皆文件,基于文件的套接字调用的就是底层的文件系

java 和 C++ Socket通信(java作为服务端server,C++作为客户端client,解决中文乱码问题GBK和UTF8)

原文链接: http://www.cnblogs.com/kenkofox/archive/2010/04/25/1719649.html 代码: http://files.cnblogs.com/kenkofox/Client-CPlusPlus.rarhttp://files.cnblogs.com/kenkofox/Server_Java.rar java和C++使用Socket通信,其实底层Socket都是相通的,所以只需要按照各自的语法去做就是了. java服务器端使用ServerSo

Socket通信——C++server端和Javaclient

一句话来说就是.C++和Java 通过socket进行通信.传输数据.通过发送"字节流"就可以. 字节对于C++和java来说是通用的.可是传输的过程有很多问题须要注意,我为了弄清楚这个过程,查了一些资料,做了一些整理. 不了解C++ socket编程,能够看这篇博客: Linux 下:socket通信(Linux下,C/C++语言):http://blog.csdn.net/giantpoplar/article/details/47657303 Windows下:winsock:h

[转] 3个学习Socket编程的简单例子:TCP Server/Client, Select

以前都是采用ACE的编写网络应用,最近由于工作需要,需要直接只用socket接口编写CS的代码,重新学习这方面的知识,给出自己所用到的3个简单例子,都是拷贝别人的程序.如果你能完全理解这3个例子,估计socket编程就已经基本入门了. 建议:1) 多多查查所用到的网络接口; 2) 最好有一本书,如UNIX环境高级编程,UNIX网络编程,可查询:3) 可以直接使用书上的例子更好. http://blog.csdn.net/zhenjing/article/details/4770490 TCP C

(填坑系列) 用aio写server与client进行通信的坑

最近闲来无事,就估摸着自己写个“服务注册中心”来玩,当然因为是个人写的,所以一般都是简洁版本. 代码地址在:https://gitee.com/zhxs_code/my-service-register.git 由于在处理与网络数据时,为了性能,想到用AIO来实验,结果发现AIO整个思路与之前的BIO,NIO都不一样.导致出现一些深坑,在此记录一下. (一)  AIO写的server端与client端,只能通信一次. 上代码: server端部分: 1 public class Register

C Socket Programming server client

用C语言socket编程写简单的server和client程序,目的为了测试一次socket连接中,数据从client端开始发送至server端接受完毕所耗的时间,以及找到原因和提升性能.这里贴出代码,make以后,直接运行server和client即可. sever.c /************************************ * For msmr * server_s.c * tesing the speed of socket * 2015-02-04 * [email 

Android开发socket通信——手机做server端C/S架构实现

每一部智能手机都是一部微型电脑,在学校里最喜欢的就是找上十个八个同学一起局域网内开几局dota,突然想到,拿手机C一个游戏来玩怎样,不用连wifi.不用开数据,几部手机选一个做主机,其他手机连上它的热点,便可以互动起来游戏搞起来了,多开心~~ 实际实现过程中发现拿手机本身做server的手段还真是很少有人使用,网上也很少有现成的解决方案,经过一番摸索,简单实现了手机自身做server(可兼做客户端)的socket通信功能,写出来请大家指导一下,也是简单梳理一下方便日后复用. 遇到的最大问题可能是

Java设置Client Socket链接Server超时时间

Java设置Client Socket链接Server超时时间 学习了:http://blog.csdn.net/tterminator/article/details/52494141 http://blog.csdn.net/fw0124/article/details/41227543 整理如下: Socket client = null; // 创建一个流套接字,连接到指定主机上的指定端口号 // client = new Socket(IP, PORT); client = new S