基础socket编程

server 端

#define MAXLINE 1024
int main() {
	int n;
	char buf[1024];
	sockfd = socket(AF_INET, SOCK_STREAM, 0);
	struct sockaddr_in servaddr;
	servaddr.sin_family = AF_INET;
	servaddr.sin_port(6666);
	servaddr.sin_addr.s_addr = INADDR_ANY;
	//	servaddr.sin_addr.s_addr=inet_addr("127.0.0.1");
	//	inet_pton(AF_INET,argv[1],&servaddr.sin_addr);
	bind(sockfd, (struct sockaddr *) &servaddr, sizeof(servaddr));
	listen(sockfd, 10);
	while (1) {
		connfd = accept(sockfd, (struct sockaddr *) NULL, NULL);
		n = recv(connfd, buf, MAXLINE, 0);
		buf[n] = '\0';
		printf("the msg recved is %s\n", buf);
	}
}


 

client端

#define MAXLINE 1024
int main() {
	sockfd = socket(AF_INET, SOCK_STREAM, 0);
	struct sockaddr_in servaddr;
	servaddr.sin_family = AF_INET;
	servaddr.sin_port = htons(6666);
	servaddr.sin_addr.s_addr = INADDR_ANY;

	//  clientaddr bind is not necessary.if not appear here,the client socket's port will be random.
	struct sockaddr_in clientaddr;
	clientaddr.sin_family = AF_INET;
	clientaddr.sin_port = htons(8888);
	clientaddr.sin_addr.s_addr = inet_addr("127.0.0.1");
	bind(sockfd, (struct sockaddr *) &clientaddr, sizeof(clientaddr));

	// all the error can handled like this
	if ((connect(sockfd, (struct sockaddr *) &servaddr, sizeof(servaddr))) < 0) {
		printf("connect error: %s(errno:%d)", strerror(errno), errno);
	}
	send(sockfd, sendline, strlen(sendline), 0);
	close(sockfd);
}


 客户端的bind函数不是必须的,如果不指定,则自动会随机分配一个端口。如果手动指定,sin_port一般指定1024之后的端口即可;sin_addr 要指定客户端自己的ip地址,否则报错:bind error:Cannot assign requested address(errno:99)

 

查看端口使用的情况 netstat -apn|grep a.out

 

posted on 2012-06-18 22:02  java课程设计  阅读(230)  评论(0)    收藏  举报

导航