Server:
#include <stdio.h>
#include <stdlib.h>
#include <sys/socket.h>
#include <unistd.h>//sleep();
#include <netinet/in.h>
#include <arpa/inet.h>
int main(int argc, const char * argv[]) {
//Server Septs:
/*
1.创建socket
2.循环监听
3.创建线程处理数据
*/
//创建流套接字:
int sock;
struct sockaddr_in in;
if ((sock = socket(AF_INET,SOCK_STREAM,0)) == -1) {
printf("创建原始套接字出错!\n");
exit(1);//异常退出1/-1,正常退出0
}
//封装地址:(为本机地址)
in.sin_addr.s_addr = inet_addr("0.0.0.0");
in.sin_family = AF_INET;
in.sin_port = htons(4396);
//bind连接socket与ip:
if (bind(sock, (struct sockaddr *)&in, sizeof(in)) != 0) {
printf("bind error!\n");
exit(1);
}
//监听:
if (listen(sock, 5) != 0) {
printf("listen error!\n");
exit(1);
}
printf("Established!\n");
struct sockaddr_in receiveAddr;
socklen_t receiveAddrLen = sizeof(receiveAddr);
while ((accept(sock, (struct sockaddr *)&receiveAddr, &receiveAddrLen)) != -1) {
printf("来自 %s 的连接!\n",inet_ntoa(receiveAddr.sin_addr));
}
return 0;
}
#include <stdio.h>
#include <stdlib.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <unistd.h>//close();
int main(int argc, const char * argv[]) {
/*Step:
1.创建socket
2.connect
*/
int sockfd;
struct sockaddr_in addr;
if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1) {
printf("创建原始套接字出错!\n");
exit(1);//异常退出1/-1,正常退出0
}
//这两种方式都可以将char*类型的地址转换成网络字节序:
addr.sin_addr.s_addr = inet_addr("127.0.0.1");
// inet_pton(AF_INET, "127.0.0.1", &addr.sin_addr);
addr.sin_family = AF_INET;
addr.sin_port = htons(4396);
if ((connect(sockfd, (struct sockaddr*)&addr, sizeof(addr))) != 0) {
perror("connect");
close(sockfd);
exit(-1);
}
printf("Connected to server!\n");
return 0;
}