服务器端
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
int main()
{
int sockfd = socket(AF_INET, SOCK_STREAM, 0);
if (sockfd == -1)
{
exit(1);
}
struct sockaddr_in saddr, caddr;
memset(&saddr, 0, sizeof(saddr));
saddr.sin_family = AF_INET;
saddr.sin_port = htons(6000);
saddr.sin_addr.s_addr = inet_addr("127.0.0.1");
int res = bind(sockfd, (struct sockaddr *)&saddr, sizeof(saddr));
if (res == -1)
{
printf("bind err\n");
exit(1);
}
res = listen(sockfd, 5);
if (res == -1)
{
exit(1);
}
while (1)
{
socklen_t len = sizeof(caddr);
int c = accept(sockfd, (struct sockaddr *)&caddr, &len);
if (c < 0)
{
continue;
}
printf("connect c = %d\n", c);
while (1)
{
char buff[128] = {0};
int n =recv(c, buff, sizeof(buff), 0);
if(n==0){
break;
}
printf("buff = %s\n", buff);
send(c, "ok", 2, 0);
}
close(c);
}
}
服务端步骤:
1.socket() 创建监听套接字
2.bind() 绑定端口和ip
3.lsiten()使用监听套接字建立监听窗口个数
4.accetp()接收连接请求,建立连接
5.recv()接收信息
6.send()发送信息
7.close()关闭监听套接字
客户端
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
int main()
{
int sockfd = socket(AF_INET, SOCK_STREAM, 0);
if (sockfd == -1)
{
exit(1);
}
struct sockaddr_in saddr;
memset(&saddr, 0, sizeof(saddr));
saddr.sin_family = AF_INET;
saddr.sin_port = htons(6000);
saddr.sin_addr.s_addr = inet_addr("127.0.0.1");
int res = connect(sockfd, (struct sockaddr *)&saddr, sizeof(saddr));
if (res == -1)
{
printf("connect err\n");
exit(1);
}
while (1)
{
char buff[128] = {0};
fgets(buff, 127, stdin);
send(sockfd, buff, sizeof(buff), 0);
memset(buff,0,sizeof(buff));
recv(sockfd, buff, sizeof(buff), 0);
printf("buff=%s\n", buff);
}
close(sockfd);
}
客户端步骤:
1.socket()建立连接套接字
2.connect()发送连接请求
3.send()发送信息
4.recv()接收信息
5.close()关闭连接套接字
总结
先启动服务器端,后启动客户端,127.0.0.1为默认主机地址,仅用于测试时使用,运行成功建立连接后,客户端循环发送信息到服务器端,服务器端返回"ok"到客户端。
如果客户端不发送连接请求,服务器端阻塞在accept(),在建立连接后,如果客户端不发送信息,服务器阻塞在recv();