linux socket 通信
client:
#include <stdio.h>
#include <stdlib.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <string.h>
#include <sys/types.h> /* See NOTES */
//client->server 点对点通信
int main()
{
//创建
int fd = socket(AF_INET, SOCK_STREAM, 0);
if (fd == -1)
{
perror("socket");
}
int on = 1;
setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on)); //允许重用端口
struct sockaddr_in addr_in;
struct in_addr netip;
inet_aton("192.168.105.214", &netip);
addr_in.sin_addr = netip;
addr_in.sin_port = htons(8080);
addr_in.sin_family = AF_INET;
//绑定
bind(fd, (struct sockaddr*)&addr_in, sizeof(addr_in));
//connect
int ret = connect(fd, (struct sockaddr*)&addr_in, sizeof(addr_in));
if (ret == 0)
{
printf("socket connected.\n");
char buff[] = "hello world\n";
while (1)
{
write(fd, buff, sizeof(buff));
sleep(1);
}
}
close(fd);
return 0;
}
server:
#include <stdio.h>
#include <stdlib.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <string.h>
#include <sys/types.h> /* See NOTES */
//client->server 点对点通信
int main()
{
//创建
int fd = socket(AF_INET, SOCK_STREAM, 0);
if (fd == -1)
{
perror("socket");
}
int on = 1;
setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on));//允许重用端口
struct sockaddr_in addr_in;
struct in_addr netip;
inet_aton("192.168.80.130", &netip);
addr_in.sin_addr = netip;
addr_in.sin_port = htons(8080);
addr_in.sin_family = AF_INET;
//绑定
bind(fd, (struct sockaddr*)&addr_in, sizeof(addr_in));
//监听
listen(fd, 10);
struct sockaddr_in new_conn;
socklen_t len = sizeof(new_conn);
//接受连接
int newfd = accept(fd, (struct sockaddr*)&new_conn, &len);
if (newfd > 0)
{
printf("socket server started\n");
printf("new_conn is ip:%s\n", inet_ntoa(new_conn.sin_addr));
//接受数据
char buff[20] = { 0 };
while (1)
{
bzero(buff, sizeof(buff));
int ret2 = recv(newfd, buff, sizeof(buff), 0);
if (ret2 > 0)
{
printf("%s\n", buff);
}
}
}
close(fd);
return 0;
}
接收数据长度可变,怎么解决粘包的问题?

浙公网安备 33010602011771号