C_C++socket编程基础

原文链接: http://www.linuxhowtos.org/C_C++/socket.htm
本文通过了一个简单的c程序的例子展示了程序中如何通过socket进行进程间通信。
现在大部分的进程间通信都是c/s模式( client server模式),两个进程中的client端主动地链接server端,通常是发送一个请求。就像一个人给另一个人挂电话时的拨号动作。
所以client端必须知道server端的网络地址,server在链接建立之前并不知道是哪个程序连接了它。
而且一旦链接建立,两端都可以发送和接受信息。
每个进程间通信通道的一端就是一个socket。所以通信中的两个进程都建立的了各自的socket
客户端建立socket连接的步骤如下:
  1.创建一个socket。通过系统调用socket()
  2.调用connect()方法把上一步创建的socket连接到server端的地址。
  3.发送和接收数据。有很多方式,但是最简单的就是调用read()和write()方法。
服务端建立socket连接的步骤如下:
  1.创建一个socket。通过系统调用socket()
  2.通过bind()方法把创建的socket绑定到一个网络地址,这里需要提供一个端口号。
  3.通过listen()方法监听连接
  4.通过accept()方法接受一个连接,通常在有client端连接server端之前是这个调用被挂起的。
  5.发送和接收数据。
socket类型
当一个socket被建立时,程序必须制定socket的类型和地址域,只有在两个进程的socket的类型是相同的并且在相同的域中,这两个程序才能相互通信。
目前比较广泛使用的地址域有unix domain和Internet domain这里只介绍Internet domain
而常用的套接字类型有 stream sockets和datagram sockets(它们的区别是:stream sockets是使用TCP协议,而datagram sockets使用的是UDP协议)
附件是一个简单的socket的C代码。
 你可以修改它们,然后再编译。在linux下的编译方式是:g++ server.c -o server。
这样就生成了一个c++程序server。用相同方式生成client。
执行server时需要指定端口,所以在命令行中执行方法如下
./server 51717
相应地,执行client需要指定两个变量,server所在的ip和端口,比如,我在本机执行,命令行如下:
./client localhost 51717这时,client会提示你输入信息(message)。回车之后,如果不出意外的话,server就会显示出你在client中输入的信息,并且发送一个确认信息到client。client也会打印出server传回的确认信息并退出。
我在代码中添加了僵尸进程的处理:就是在代码中加入下面两句话
#include <signal.h>
signal(SIGCHLD,SIG_IGN);

详细的代码说明请查看附件中的网页或者开头的原文链接。

你可能感兴趣的:(C++,职场,休闲)