这是我学习c/c++的第二个项目,做为一个菜鸟,只会最基本的语法,很多都要标记出来。
#include <stdio.h>
#include <sys/types.h>#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
int main(int argc, char *argv[])
{
int sockfd;
//------ sockfd 是该socket在操作系统中的唯一标识,通过sockfd可以找到该socket
int len;
struct sockaddr_in address;
//------- sockaddr_in 后面的in是internet的意思,该数据结构标识一个互联网地址,包括ip和端口号
int result;char ch = 'A';
//-------- 测试的内容,发送一个A
sockfd = socket(AF_INET, SOCK_STREAM, 0);
//------- 创建一个socket,AF_INET是IPV4(IPV6是AF_INET6), SOCK_STREAM是使用TCP,0表示协议编号,一般设置为0即可
address.sin_family = AF_INET;
//-------- 这是一个IPV4的地址
address.sin_addr.s_addr = inet_addr("127.0.0.1");
//--------- 地址是127.0.0.1
address.sin_port = htons(9734);
//--------- 端口是9734
len = sizeof(address);
//---------- 获得地址的长度
result = connect(sockfd, (struct sockaddr *)&address, len);//---------- 调用connect,将sockfd,连接到address地址(connect之前是prepared,之后是established,这个在操作系统用netstat可以看到)
if (result == -1)
{
perror("oops: client1");
exit(1);
}
//----------- 连接失败,写日志,退出
write(sockfd, &ch, 1);
//---------- 请求,则将'A'这个字符写入fd
read(sockfd, &ch, 1);
//---------- 响应,从fd读取1个字节存入ch
printf("char from server = %c\n", ch);
//--------- 打印响应结果
close(sockfd);
//--------- 关闭socket
exit(0);}
总结:代码短小,逻辑清晰;主要用到c语言socket编程的api.