2-socket的实践到内核--socket使用IP地址通讯
来源:互联网 发布:均衡器软件 编辑:程序博客网 时间:2024/06/14 23:05
#include <sys/types.h>
#include <sys/socket.h>
#include <stdio.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <stdlib.h>
int main()
{
int server_sockfd, client_sockfd;
int server_len, client_len;
struct sockaddr_in server_address;
struct sockaddr_in client_address;
下面创建一个网络使用的socket
server_sockfd = socket(AF_INET, SOCK_STREAM, 0);
为这个创建的socket指定IP地址和端口,ip地址是127.0.0.1而端口则为9734
server_address.sin_family = AF_INET;
server_address.sin_addr.s_addr = inet_addr("127.0.0.1");
server_address.sin_port = 9734;
server_len = sizeof(server_address);
将“电话号码”赋值给“电话”,即将设定的地址结构与socket挂起钩来,朋友们以后理解指针赋值可以理解为钩子,就象网上有种叫法“钩子函数”实际就是指针函数
bind(server_sockfd, (struct sockaddr *)&server_address, server_len);
创建一个socket的连接队列监听或者称为等待客户端处的socket来连接
listen(server_sockfd, 5);
while(1) {
char ch;
printf("server waiting/n");
到达此处时,已经说明客户端的连接请求来到了,下面是接受它的连接请求并将客户端的“电话号码”记录在client_address中。并且通过accept克隆了一个二者保持通讯的socket,为什么要克隆,我们追踪到内核再说,这里函数返回了服务器端与客户端建立连接的socket的ID号
client_len = sizeof(client_address);
client_sockfd = accept(server_sockfd,
(struct sockaddr *)&client_address, &client_len);
使用read和write函数向已经建立的socket接收客户端的一个字符然后再发送回去
read(client_sockfd, &ch, 1);
ch++;
write(client_sockfd, &ch, 1);
close(client_sockfd);
}
}
#include <sys/types.h>
#include <sys/socket.h>
#include <stdio.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <stdlib.h>
int main()
{
int sockfd;
int len;
struct sockaddr_in address;
int result;
char ch = 'A';
同样要创建一个客户端的socket,然后用这个socket去向服务器的socket连接去
sockfd = socket(AF_INET, SOCK_STREAM, 0);
为建立的socket设定电话号码,这个电话号码要与服务器端的socket号码一致,准备连接使用
address.sin_family = AF_INET;
address.sin_addr.s_addr = inet_addr("127.0.0.1");
address.sin_port = 9734;
len = sizeof(address);
使用电话号码向服务器端拨号,请求服务器的socket连接
result = connect(sockfd, (struct sockaddr *)&address, len);
if(result == -1) {
perror("oops: client2");
exit(1);
}
到这里我们连接成功了,就对建立的socket发送一个字符然后接收服务器端返回的一个字符并打印了到控制台
write(sockfd, &ch, 1);
read(sockfd, &ch, 1);
printf("char from server = %c/n", ch);
close(sockfd);
exit(0);
}
[root@localhost wumingxiaozu]# ./server2 &
[root@localhost wumingxiaozu]# ./client2
char from server = B
- 2-socket的实践到内核--socket使用IP地址通讯
- 2-socket的实践到内核--socket使用IP地址通讯 .
- 6-socket的实践到内核--Unix中socket的地址绑定
- 6-socket的实践到内核--Unix中socket的地址绑定 .
- 1--socket的实践到内核--socket实践练习
- 1--socket的实践到内核--socket实践练习 .
- 7-socket的实践到内核--socket的监听
- 14-socket的实践到内核--socket的关闭
- 7-socket的实践到内核--socket的监听 .
- 14-socket的实践到内核--socket的关闭
- 3-socket的实践到内核--追踪socket到内核
- 3-socket的实践到内核--追踪socket到内核 .
- 9-socket的实践到内核--client调用connect
- 9-socket的实践到内核--client调用connect .
- 10-socket的实践到内核--UDP的socket数据的接收
- 11-socket的实践到内核--UDP的socket数据的发送
- 12-socket的实践到内核--TCP的socket数据的接收
- 13-socket的实践到内核--TCP的socket数据的发送
- “macOS终端命令下更改 profile文件后如何保存”之解决办法
- lotus中Textarea 换行符
- Tomcat的启动过程
- 1--socket的实践到内核--socket实践练习
- sql之left join、right join、inner join的区别
- 2-socket的实践到内核--socket使用IP地址通讯
- if [-e $file]
- 3-socket的实践到内核--追踪socket到内核
- 用gcc编译C++程序
- android官方文档:ubuntu10.04下编译android源码Building the System
- GridView(九宫图)
- 4-socket的实践到内核--追踪socket的创建
- 点滴记录,以求共勉
- 浅析C#深拷贝与浅拷贝