TCP编程的一个小例子
TCP程序的服务器端与客户端的流程图

例子:服务器端等待客户端连接,若连接成功,则用户可以通过客户端向服务器端发送任意字符串,服务器端在收到字符串后,输出相关信息,在把接受到的字符串重新发生给客户端。客户端收到后显示在屏幕上
服务器端:
#include <sys/stat.h>#include <fcntl.h>#include <errno.h>#include <netdb.h>#include <sys/types.h>#include <sys/socket.h>#include <netinet/in.h>#include <arpa/inet.h>#include <string.h>#include <stdlib.h>#include <stdio.h>#include <unistd.h>int main(){int len;struct sockaddr_in serverAddr;int clientSocket;char sendbuf[200];char recvbuf[200];if ((clientSocket = socket(AF_INET, SOCK_STREAM, 0)) < 0){perror("socket error");return -1;}serverAddr.sin_family = AF_INET;serverAddr.sin_port = htons(5555);serverAddr.sin_addr.s_addr = inet_addr("127.0.0.1");//connect()函数帮助客户端向指定地址的服务器发起一条TCP连接,成功返回0;第一个参数为连接套接字,第二个为服务器端的地址信息和协议信息if (connect(clientSocket, (struct sockaddr *)&serverAddr, sizeof(serverAddr)) < 0){perror("connect");exit(1);}printf("connect with destination host...\n");while (1){printf("Input your Word:>");scanf("%s", sendbuf);//缺陷:不能传输带空格的句子printf("\n");if (strcmp(sendbuf, "quit") == 0)break;write(clientSocket, sendbuf, strlen(sendbuf));len = read(clientSocket, recvbuf, 200);recvbuf[len] = '\0';printf("recv data of my word is : %s\n", recvbuf);}close(clientSocket);return 0;}注:有个小问题是为什么客户端不能循环输入?
UDP即无链接编程,和这个类似,一般用在P2P中,主要是创建socket的时候,要指定SOCK——DGRAM.
数据的收发调用sendto()和recvfrom().