(1)linux之socket笔记(一)

参考博客:http://blog.csdn.net/zqixiao_09/article/details/50505795
                 https://www.cnblogs.com/uestc-mm/p/7630145.html

 

server:   

#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h>
#include <stdio.h>
#include <errno.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <stdio.h>

int main(int argc, char **argv){
	struct sockaddr_in server_addr;
	struct sockaddr_in client_addr;
	int struct_len, fd, new_fd, numbytes, i;
	char buff[1024];

	server_addr.sin_family = AF_INET;
	server_addr.sin_port = htons(8218);
	server_addr.sin_addr.s_addr = INADDR_ANY;
	bzero(&(server_addr.sin_zero), 8);
	numbytes = sizeof(struct sockaddr_in);

	fd = socket(AF_INET, SOCK_STREAM, 0);
	if(-1 == fd){
		printf("socket open fail\n");
		return -1;
	}

	while(bind(fd, (struct sockaddr *)&server_addr, sizeof(struct sockaddr_in) ) == -1);
	printf("Bind Success !\n");
	while(listen(fd, 10) == -1);
	printf("Listen.....\n");
	
	printf("Reddy for Accept, Wait.....\n");
	new_fd = accept(fd, (struct sockaddr *)&client_addr, &numbytes);
	printf("Get client...\n");

	numbytes = send(new_fd, "Wellcome to my server\n", 21, 0);

	while((numbytes = recv(new_fd, buff, 1024, 0)) > 0){
		buff[numbytes] = '\0';
		printf("%s\n", buff);
		if(send(new_fd, buff, numbytes, 0) < 0){
			perror("write");
			return 1;
		}
	}
	close(new_fd);
	close(fd);

	return 0;
}

client:

#include <stdio.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <sys/socket.h>
#include <stdlib.h>
#include <arpa/inet.h>
#include <string.h>
#include <unistd.h>

int main(int argc, char **argv){
	struct sockaddr_in server_addr;
	int fd, numbytes;
	char buff[1024];

	while((fd = socket(AF_INET, SOCK_STREAM, 0)) == -1);
	printf("socket open success!\n");

	server_addr.sin_family = AF_INET;
	server_addr.sin_port = htons(8218);
	server_addr.sin_addr.s_addr = inet_addr("127.0.0.1");
	bzero(&(server_addr.sin_zero), 8);
	
	while(connect(fd, (struct sockaddr *)&server_addr, sizeof(struct sockaddr_in))== -1);
	printf("We get server success!\n");
	numbytes = recv(fd, buff, 1024, 0);
	buff[numbytes] = '\0';
	printf("%s\n", buff);

	while(1){
		printf("Please enter trans info:\n");
		scanf("%s", buff);
		numbytes = send(fd, buff, strlen(buff), 0);
		numbytes = recv(fd, buff, 1024, 0);
		buff[numbytes] = '\0';
		printf("received:%s\n", buff);
	}
	close(fd);
	
	return 0;
}

注意:必须同一个网段,若非同一个网段,必须过三层路由。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值